Files
Teknium 1a71782f17 feat(cli): backtrack picker — Esc Esc / /rewind to edit & resend or fork from an earlier prompt
Classic CLI gains a Codex-style backtrack picker. Esc Esc on an idle, empty composer with no
overlay (or /rewind) lists earlier prompts newest first with a preview and turn number.

- Enter: prefill the prompt for editing. Nothing is cut until the edit is submitted; the
  submission rides to the process loop as a BacktrackResend, which re-validates the picked
  turn (same session, same text) and then runs the same durable rewind /undo uses. Esc Esc,
  Ctrl+C, an empty submit, or submitting a slash/! command cancels and cuts nothing.
- f: fork. Runs the existing /branch path, then rewinds only the CHILD to just before the
  picked prompt and prefills it; the parent's rows stay active.
- /rewind N and /rewind fork N do the same without the picker.

Esc Esc with a draft still discards it; mid-turn Esc Esc is unchanged.

undo_last's rewind body moves into CLISessionMixin._rewind_to_user_ordinal (shared by /undo
and the picker; same compaction-carrier handling, agent patching and memory rewound hook).
The picker lives in a new hermes_cli/cli_backtrack.py mixin; cli_tui_mixin.py is untouched.
CommandDef rewind is cli_only (desktop: terminal); desktop registry and parity table regenerated.
2026-11-04 23:06:14 -08:00

3984 lines
389 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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: "⚠️ НЕБЕЗПЕЧНА КОМАНДА: {description}"
choose_long: " [o]один раз | [s]сеанс | [a]завжди | [d]відхилити"
choose_short: " [o]один раз | [s]сеанс | [d]відхилити"
prompt_long: " Вибір [o/s/a/D]: "
prompt_short: " Вибір [o/s/D]: "
choose_smart_deny: " [o]один раз | [d]відхилити"
prompt_smart_deny: " Вибір [o/D]: "
smart_deny_once_inputs: "o,once,р,раз"
smart_deny_deny_inputs: "d,deny,в,відхилити"
timeout: " ⏱ Немає відповіді протягом {waited} — команду не виконано. Попросіть знову, щоб повторити, або збільште ліміт: hermes config set approvals.timeout {suggested}"
allowed_once: " ✓ Дозволено один раз"
allowed_session: " ✓ Дозволено для цього сеансу"
allowed_always: " ✓ Додано до постійного списку дозволених команд"
denied: " ✗ Відхилено"
cancelled: " ✗ Скасовано"
blocklist_message: "Ця команда є в безумовному списку блокування, її не можна схвалити."
inputs:
approve: "approve,yes,ok,okay,confirm,y,схвалити,так,підтвердити,т"
deny: "deny,no,reject,cancel,n,відхилити,ні,скасувати,н"
always: "always,approve always,always approve,завжди,завжди схвалювати"
session: "session,approve session,session approve,сеанс,схвалити на сеанс"
confirm_once: "approve,approve once,once,yes,ok,confirm,схвалити,один раз,так,підтвердити"
confirm_always: "always,always approve,remember,завжди,запам'ятати"
confirm_cancel: "cancel,nevermind,no,deny,скасувати,ні,відхилити"
summary:
denied: "Ви відхилили запуск {noun} — нічого не виконано."
timeout: "Немає відповіді протягом {window} — запуск {noun} не відбувся."
notify_failed: "Не вдалося доставити запит на схвалення — запуск {noun} не відбувся."
cancelled: "Запит на схвалення було відкликано або він не дійшов до вас — запуск {noun} не відбувся."
blocked: "У сеансі без нагляду запуск {noun} не дозволено — нічого не виконано."
default: "Запуск {noun} не відбувся."
noun:
command: "команди"
code: "коду"
action: "дії"
window:
hour_one: "{count} година"
hour_other: "{count} годин"
minute_one: "{count} хвилина"
minute_other: "{count} хвилин"
second_one: "{count} секунда"
second_other: "{count} секунд"
gateway:
approval_expired: "⚠️ Час схвалення минув (агент більше не очікує). Попросіть агента спробувати ще раз."
draining: "⏳ Очікування завершення {count} активних агент(ів) перед перезапуском..."
goal_cleared: "✓ Ціль очищено."
no_active_goal: "Немає активної цілі."
config_read_failed: "⚠️ Не вдалося прочитати config.yaml: {error}"
config_save_failed: "⚠️ Не вдалося зберегти конфігурацію: {error}"
model:
error_prefix: "Помилка: {error}"
switched: "Модель змінено на `{model}`"
provider_label: "Провайдер: {provider}"
context_label: "Контекст: {tokens} токенів"
max_output_label: "Макс. вихід: {tokens} токенів"
cost_label: "Вартість: {cost}"
capabilities_label: "Можливості: {capabilities}"
prompt_caching_enabled: "Кешування промптів: увімкнено"
warning_prefix: "Попередження: {warning}"
saved_global: "Збережено в config.yaml (`--global`)"
session_only_hint: "_(лише для цього сеансу — додайте `--global`, щоб зберегти)_"
current_label: "Поточна: `{model}` на {provider}"
current_tag: " (поточна)"
more_models_suffix: " (+{count} ще)"
usage_switch_model: "`/model <name>` — змінити модель"
usage_switch_provider: "`/model <name> --provider <slug>` — змінити провайдера"
usage_persist: "`/model <name> --global` — зберегти назавжди"
usage_reset: "`/model reset` — скинути перевизначення цієї сесії"
reset_done: "Перевизначення моделі сесії скинуто — тепер використовується `{model}` (типове значення каналу/глобальне). Історію розмови збережено."
reset_none: "У цій сесії немає активного перевизначення моделі — вже використовується `{model}` (типове значення каналу/глобальне)."
err_skew: "Цей шлюз виконує код із {boot_rev}, але робоча копія на диску вже {disk_rev}. Перемикання моделі може призвести до збою через застарілі модулі — перезапустіть шлюз, щоб завантажити новий код: hermes gateway restart"
err_switch_failed: "Не вдалося перемкнути модель на {model} ({error}); залишаємось на {current}."
err_config_not_updated: "config.yaml не оновлено ({error})"
err_stale_override: "збережено в config.yaml, але застаріле перевизначення сеансу не вдалося скинути ({error})"
next_turn_only: " (лише на наступний хід — відновиться після однієї відповіді)"
switch_cancelled: "🟡 Перемикання моделі скасовано. Поточна модель без змін ({model})."
guard_confirm: "⚠️ **{title}**\n\n{message}\n\n_Текстова альтернатива: відповідайте `{prefix}approve`, щоб перемкнути, або `{prefix}cancel`, щоб залишити поточну модель._"
err_once_local: "`--once` is not available in this session; use `/model <name>` and switch back after the turn."
local_next_turn: "Applies from your next message."
agents:
header: "🤖 **Активні агенти та завдання**"
active_agents: "**Активні агенти:** {count}"
this_chat: " · цей чат"
more: "... і ще {count}"
running_processes: "**Фонові процеси, що виконуються:** {count}"
async_jobs: "**Асинхронні задачі гейтвея:** {count}"
background_delegations: "**Фонові делегування:** {count}"
none: "Немає активних агентів або задач."
state_starting: "запускається"
state_running: "виконується"
no_progress: " · без прогресу {seconds}с"
quiet_for: " · тиша {seconds}с"
between_turns: "між ходами"
child_row: " - дочірній {index}: {calls} api-викликів · {doing}"
active_ago: " · активний {seconds}с тому"
approve:
no_pending: "Немає команди на схвалення."
once_singular: "✅ Команду схвалено. Агент відновлює роботу…"
once_plural: "✅ Команди схвалено ({count} команд). Агент відновлює роботу…"
session_singular: "✅ Команду схвалено (шаблон схвалено для цього сеансу). Агент відновлює роботу…"
session_plural: "✅ Команди схвалено (шаблон схвалено для цього сеансу) ({count} команд). Агент відновлює роботу…"
always_singular: "✅ Команду схвалено (шаблон схвалено назавжди). Агент відновлює роботу…"
always_plural: "✅ Команди схвалено (шаблон схвалено назавжди) ({count} команд). Агент відновлює роботу…"
background:
usage: "Використання: /bg <запит>\nПриклад: /bg Підсумуй найкращі історії з HN сьогодні\n\nЗапускає запит в окремому сеансі. Можна продовжити спілкування — результат з'явиться тут після завершення."
started: "🔄 Фонове завдання запущено: «{preview}»\nID завдання: {task_id}\nМожна продовжити спілкування — результати з'являться тут після завершення."
task_finished: "✅ Фонове завдання завершено"
task_failed: "❌ Фонове завдання завершилося з помилкою"
exit_code: "код виходу {code}"
last_output: ". Останній вивід:\n```\n{tail}\n```"
rerun_hint: "\nПопросіть мене запустити його знову або показати повний журнал."
no_credentials: "❌ Фонове завдання не вдалося запустити: не налаштовано вхід до жодної AI-моделі. Використайте /login або виконайте `hermes setup` на хості."
complete_header: "✅ Фонове завдання виконано\nЗапит: «{preview}»\n\n"
no_response: "(Відповідь не згенеровано)"
failed: "❌ Ваше фонове завдання «{preview}» завершилося з помилкою, не дійшовши до кінця. Надішліть /bg ще раз, щоб повторити, або /agents, щоб побачити, що ще виконується."
final_output: "{header}\n\nПідсумковий вивід:\n```\n{output}\n```"
still_running: "⏳ Фонове завдання ще виконується"
recent_output: "{header}\n\nОстанній вивід:\n```\n{output}\n```"
btw:
usage: "Використання: /btw <питання>\nПриклад: /btw у якому файлі була та помилка?\n\nВідповідає на швидке побіжне питання про цю розмову, не перериваючи її. Для незалежного фонового завдання використовуйте /bg <запит>."
no_history: "Розмови ще немає — надішліть питання звичайним повідомленням."
no_provider: "❌ Не вдалося відповісти: облікові дані провайдера не налаштовано."
started: "💬 Побіжне питання: «{preview}»\nВідповідаю за знімком цієї розмови — поточна робота триває."
answer: "💬 /btw: «{preview}»\n\n{answer}"
failed: "❌ /btw не вдалося: «{preview}»\n{error}"
branch:
db_unavailable: "База даних сеансів недоступна."
no_conversation: "Немає розмови для розгалуження — спочатку надішліть повідомлення."
create_failed: "Не вдалося створити гілку: {error}"
switch_failed: "Гілку створено, але не вдалося переключитися на неї."
branched_one: "⑂ Створено гілку **{title}** (скопійовано {count} повідомлення)\nОригінал: `{parent}`\nГілка: `{new}`\nВикористайте `/resume`, щоб повернутися до оригіналу."
branched_many: "⑂ Створено гілку **{title}** (скопійовано {count} повідомлень)\nОригінал: `{parent}`\nГілка: `{new}`\nВикористайте `/resume`, щоб повернутися до оригіналу."
branched_thread_one: "⑂ Гілку **{title}** створено в новому треді ({count} повідомлення скопійовано)\nТред: {thread}\nОригінал: `{parent}` — цей чат залишається на ньому\nГілка: `{new}`\nВикористовуйте `/branch --here`, щоб розгалузити в цьому чаті."
branched_thread_many: "⑂ Гілку **{title}** створено в новому треді ({count} повідомлень скопійовано)\nТред: {thread}\nОригінал: `{parent}` — цей чат залишається на ньому\nГілка: `{new}`\nВикористовуйте `/branch --here`, щоб розгалузити в цьому чаті."
thread_fallback: "Тут не вдалося створити тред, тому гілка замінила сесію цього чату."
commands:
usage: "Використання: `/commands [page]`"
skill_header: "⚡ **Команди навичок**:"
default_desc: "Команда навички"
none: "Немає доступних команд."
header: "📚 **Команди** (всього {total}, сторінка {page}/{total_pages})"
nav_prev: "`/commands {page}` ← попередня"
nav_next: "наступна → `/commands {page}`"
out_of_range: "_(Запитана сторінка {requested} поза межами, показано сторінку {page}.)_"
compress:
not_enough: "Недостатньо розмови для стиснення (потрібно щонайменше 4 повідомлення)."
no_provider: "Постачальника не налаштовано — неможливо стиснути."
nothing_to_do: "Поки що немає що стискати (стенограма все ще є повністю захищеним контекстом)."
aggressive_unsupported: "--aggressive не підтримується; використовуйте '/compress here [N]', щоб зберегти лише останні обміни, або /undo, щоб видалити ходи."
focus_line: "Фокус: \"{topic}\""
summary_failed: "⚠️ Не вдалося згенерувати зведення ({error}). {count} історичних повідомлень було видалено та замінено заповнювачем; попередній контекст більше не можна відновити. Перевірте конфігурацію моделі auxiliary.compression."
aborted: "⚠️ Стиснення скасовано ({error}). Жодне повідомлення не було видалено — розмова не змінилася. Виконайте /compress, щоб повторити спробу, /reset для нової сесії, або перевірте конфігурацію моделі auxiliary.compression."
aux_failed: "ℹ️ Налаштована модель стиснення `{model}` зазнала збою ({error}). Відновлено за допомогою основної моделі — контекст не пошкоджений — але варто перевірити `auxiliary.compression.model` у config.yaml."
turnhold_deferred: "ℹ️ Стиснення контексту відкладено — підсумок ще передається. Продовжуємо цей хід без стиснення."
failed: "Стиснення не вдалося: {error}"
hygiene_timeout: "⚠️ Скорочення історії розмови тривало надто довго, тому я його пропустив і залишив усе як є. Виконайте /compress, щоб спробувати ще раз, або /new, щоб почати з чистого аркуша."
hygiene_timeout_doctor_hint: " Якщо це повторюється, виконайте `hermes doctor` на хості."
hygiene_failed: "⚠️ Скоротити історію розмови не вдалося, тому я залишив усе як є. Виконайте /compress, щоб спробувати ще раз, або /new, щоб почати з чистого аркуша. Якщо це повторюється, виконайте `hermes doctor` на хості."
codex_nothing: "🗜️ Нічого стискати: цей сеанс працює в середовищі Codex app-server, контекст якого живе в треді, що належить Codex і існує лише поки агент активний. Спочатку надішліть повідомлення, потім /compress — або /reset, щоб почати з чистого аркуша."
codex_compacted: "🗜️ Тред Codex app-server стиснуто (thread/compact). Дзеркало стенограми навмисно не змінено — стиснутий контекст тепер зберігає app-server."
codex_incomplete: "⚠️ Стиснення Codex app-server не завершилося — тред без змін. Перевірте журнали app-server, повторіть /compress або виконайте /reset для чистого сеансу."
debug:
upload_failed: "✗ Не вдалося завантажити звіт налагодження: {error}"
header: "**Звіт налагодження завантажено:**"
auto_delete: "⏱ Вставки автоматично видаляться через 6 годин."
full_logs_hint: "Щоб завантажити повні журнали, використайте `hermes debug share` з CLI."
share_hint: "Поділіться цими посиланнями з командою Hermes для отримання підтримки."
report_label: "Звіт"
local_refused: "`/debug local` залишає звіт на машині, де працює Hermes, тому недоступна з чату. Надішліть `/debug`, щоб завантажити короткий звіт."
deny:
stale: "❌ Команду відхилено (схвалення застаріло)."
no_pending: "Немає команди для відхилення."
denied_singular: "❌ Команду відхилено."
denied_plural: "❌ Команди відхилено ({count} команд)."
denied_reason_singular: "❌ Команду відхилено. Причину передано агентові: \"{reason}\""
denied_reason_plural: "❌ Команди відхилено ({count} команд). Причину передано агентові: \"{reason}\""
usage_limit:
picker_title: "Продовжити на іншій моделі:"
switch_choice: "Перейти на {model} ({note})"
fast:
not_supported: "⚡ /fast доступний лише для моделей OpenAI, які підтримують Priority Processing."
status: "⚡ Priority Processing\n\nПоточний режим: `{mode}`\n\n_Використання:_ `/fast <normal|fast|status>`"
unknown_arg: "⚠️ Невідомий аргумент: `{arg}`\n\n**Допустимі варіанти:** normal, fast, status"
saved: "⚡ ✓ Priority Processing: **{label}** (збережено в конфігурації)\n_(набуде чинності з наступного повідомлення)_"
session_only: "⚡ ✓ Priority Processing: **{label}** (лише ця сесія)"
label_fast: "ШВИДКИЙ"
label_normal: "ЗВИЧАЙНИЙ"
status_fast: "швидкий"
status_normal: "звичайний"
picker_title: "⚡ **Priority Processing**\n\nПоточний режим: `{mode}`\n\nОберіть варіант:"
choice_fast: "fast — Priority Processing увімкнено"
choice_normal: "normal — стандартна обробка"
choice_auto: "auto — швидко в перші секунди кожного ходу"
choice_cold: "cold — швидко лише на першому ході сесії"
choice_ultrafast: "ultrafast — OpenAI Ultrafast, ціна ×6"
ultrafast_not_supported: "⚡ Ultrafast недоступний для `{model}` у цьому обліковому записі або маршруті."
footer:
status: "📎 Нижній колонтитул середовища: **{state}**\nПоля: `{fields}`\nПлатформа: `{platform}`"
usage: "Використання: `/footer [on|off|status]`"
saved: "📎 Нижній колонтитул середовища: **{state}**{example}\n_(збережено глобально — набуде чинності з наступного повідомлення)_"
example_line: "\nПриклад: `{preview}`"
state_on: "УВІМКНЕНО"
state_off: "ВИМКНЕНО"
goal:
unavailable: "Цілі недоступні в цій сесії."
no_goal_set: "Ціль не встановлено."
paused: "⏸ Ціль призупинено: {goal}"
no_resume: "Немає цілі для продовження."
resumed: "▶ Ціль відновлено: {goal}\nПродовжую зараз — негайно зроблю наступний крок."
invalid: "Неприпустима ціль: {error}"
set: "⊙ Ціль встановлено (бюджет {budget} ходів): {goal}\nЯ продовжуватиму працювати, доки ціль не буде досягнута, ви її не призупините/очистите, або бюджет не вичерпається.\nКерування: /goal status · /goal pause · /goal resume · /goal clear"
gate_add_admin_only: "⛔ /goal gate add потребує явно налаштованого адміністратора шлюзу (allow_admin_from для приватних чатів, group_allow_admin_from для груп)."
help:
header: "📖 **Команди Hermes**\n"
skill_header: "\n⚡ **Команди навичок** ({count} активних):"
more_use_commands: "\n... і ще {count}. Використайте `/commands` для повного списку зі сторінками."
insights:
invalid_days: "Недійсне значення --days: {value}"
error: "Помилка при формуванні аналітики: {error}"
kanban:
error_prefix: "⚠ помилка kanban: {error}"
subscribed_suffix: "(підписано — ви отримаєте сповіщення, коли {task_id} завершиться або буде заблоковано)"
truncated_suffix: "… (скорочено; використовуйте `hermes kanban …` у терміналі для повного виводу)"
no_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} виконано — {title}{handoff}"
review_requested: "👀 {head} готово до рев'ю — {title}{handoff}"
changes_default_reason: "рев'юер вимагає змін"
reviewer_suffix: " — рев'юер @{reviewer}"
implementer_suffix: " → виконавець @{implementer}"
changes_requested: "🛑 {board_tag}Kanban {task_id}: рев'ю вимагає змін/BLOCK: {reason}{provenance}"
triage: "🛑 {head} передано в TRIAGE — {why}{recurrences}{reason}"
triage_decision: "потрібне рішення людини"
triage_attention: "потребує уваги оркестрації"
triage_recurrences: " (заблоковано {value}x з тієї ж причини)"
reason_suffix: ": {value}"
failed_n_times: "{count} збоїв поспіль"
kept_failing: "постійні збої"
last_error: " (останній: {value})"
gave_up: "⛔ {head} тепер заблоковано: {count}{last}. Усуньте причину, потім `hermes kanban unblock {task_id}` (або `hermes kanban reassign {task_id}`). Журнали: `hermes kanban log {task_id}`."
limit_minutes: "ліміт у {minutes} хвилин"
limit_generic: "ліміт часу"
timed_out: "⏱ {head}: перевищено {span}, роботу зупинено; спробу буде повторено автоматично."
blocked: "⏸ {head} заблоковано{reason}"
crashed: "✖ {head} — воркер несподівано зупинився; спробу буде повторено автоматично."
status: "🔄 {head} → {status}"
board_tag: "[{board}] "
assignee_tag: "@{assignee} "
head: "{board_tag}{assignee_tag}Kanban {task_id}"
personality:
none_configured: "У `{path}/config.yaml` не налаштовано жодної особистості"
header: "🎭 **Доступні особистості**\n"
none_option: "• `none` — (без накладання особистості)"
item: "• `{name}` — {preview}"
usage: "\nВикористання: `/personality <name>`"
save_failed: "⚠️ Не вдалося зберегти зміну особистості: {error}"
cleared: "🎭 Особистість очищено — використовується базова поведінка агента.\n_(набуде чинності з наступного повідомлення)_"
set_to: "🎭 Особистість встановлено на **{name}**\n_(набуде чинності з наступного повідомлення)_"
unknown: "Невідома особистість: `{name}`\n\nДоступні: {available}"
err_config_write: "не вдалося записати конфігурацію"
profile:
header: "👤 **Профіль:** `{profile}`"
home: "📂 **Домашня тека:** `{home}`"
plain: "Профіль: {profile}\nДомашній каталог: {home}"
reasoning:
level_default: "medium (за замовчуванням)"
level_disabled: "none (вимкнено)"
scope_session: "перевизначення сеансу"
scope_global: "глобальна конфігурація"
status: "🧠 **Налаштування мислення**\n\n**Зусилля:** `{level}`\n**Область:** {scope}\n**Показ:** {display}\n\n_Використання:_ `/reasoning <none|minimal|low|medium|high|xhigh|max|ultra|reset|show|hide> [--global]`"
display_on: "увімкнено ✓"
display_off: "вимкнено"
display_set_on: "🧠 ✓ Показ мислення: **УВІМКНЕНО**\nДумки моделі будуть показуватися перед кожною відповіддю на **{platform}**."
display_set_off: "🧠 ✓ Показ мислення: **ВИМКНЕНО** для **{platform}**"
reset_global_unsupported: "⚠️ `/reasoning reset --global` не підтримується. Використовуйте `/reasoning <level> --global`, щоб змінити глобальне значення за замовчуванням."
reset_done: "🧠 ✓ Перевизначення мислення для сеансу скинуто; повернення до глобальної конфігурації."
unknown_arg: "⚠️ Невідомий аргумент: `{arg}`\n\n**Дійсні рівні:** none, minimal, low, medium, high, xhigh, max, ultra\n**Показ:** show, hide\n**Зберегти:** додайте `--global`, щоб зберегти поза цим сеансом"
picker_title: "🧠 **Налаштування мислення**\n\n**Зусилля:** `{level}`\n**Область:** {scope}\n**Показ:** {display}\n\nОберіть варіант:"
choice_none: "none — вимкнути мислення"
choice_reset: "reset — скинути перевизначення сесії"
choice_show: "показувати мислення у відповідях"
choice_hide: "приховувати мислення у відповідях"
set_global: "🧠 ✓ Зусилля мислення встановлено на `{effort}` (збережено в конфігурації)\n_(набуде чинності з наступного повідомлення)_"
set_global_save_failed: "🧠 ✓ Зусилля мислення встановлено на `{effort}` (лише цей сеанс — не вдалося зберегти конфігурацію)\n_(набуде чинності з наступного повідомлення)_"
set_session: "🧠 ✓ Зусилля мислення встановлено на `{effort}` (лише цей сеанс — додайте `--global`, щоб зберегти)\n_(набуде чинності з наступного повідомлення)_"
quote_label_discord: "-# 💭 Міркування"
quote_label_md: "> 💭 **Міркування:**"
more_lines: "\n_... (ще {count} рядків)_"
block: "💭 **Міркування:**\n```\n{reasoning}\n```\n\n{response}"
reload_mcp:
cancelled: "🟡 /reload-mcp скасовано. MCP-інструменти без змін."
always_followup: "ℹ️ Наступні виклики `/reload-mcp` виконуватимуться без підтвердження. Увімкнути знову можна через `approvals.mcp_reload_confirm: true` у config.yaml."
confirm_prompt: "⚠️ **Підтвердження /reload-mcp**\n\nПерезавантаження MCP-серверів перебудовує набір інструментів для цього сеансу та **інвалідує кеш промпта провайдера** — наступне повідомлення повторно надішле всі вхідні токени. На моделях із довгим контекстом або високим рівнем міркувань це може бути дорого.\n\nОберіть:\n• **Схвалити один раз** — перезавантажити зараз\n• **Завжди схвалювати** — перезавантажити та назавжди приховати цей запит\n• **Скасувати** — залишити MCP-інструменти без змін\n\n_Текстова альтернатива: відповідайте `/approve`, `/always` або `/cancel`._"
header: "🔄 **MCP-сервери перезавантажено**\n"
reconnected: "♻️ Перепідключено: {names}"
added: "➕ Додано: {names}"
removed: "➖ Видалено: {names}"
none_connected: "Немає підключених MCP-серверів."
tools_available: "\n🔧 {tools} інструмент(ів) доступно з {servers} сервер(ів)"
failed: "❌ Помилка перезавантаження MCP: {error}"
reload_skills:
header: "🔄 **Навички перезавантажено**\n"
no_new: "Нових навичок не виявлено."
total: "\n📚 {count} навичок(и) доступно"
added_header: "➕ **Додані навички:**"
removed_header: "➖ **Видалені навички:**"
item_with_desc: " - {name}: {desc}"
item_no_desc: " - {name}"
failed: "❌ Помилка перезавантаження навичок: {error}"
reset:
header_default: "✨ Сесію скинуто! Починаємо з чистого аркуша."
header_new: "✨ Нову сесію запущено!"
header_titled: "✨ Нову сесію запущено: {title}"
title_rejected: "\n⚠️ Назву відхилено: {error}"
title_error_untitled: "\n⚠️ {error} — сесію запущено без назви."
title_empty_untitled: "\n⚠️ Після очищення назва порожня — сесію запущено без назви."
tip: "\n✦ Порада: {tip}"
restart:
in_progress: "⏳ Перезапуск гейтвея вже виконується..."
restarting: "♻ Перезапуск гейтвея. Якщо ви не отримаєте сповіщення протягом 60 секунд, перезапустіть із консолі командою `hermes gateway restart`."
resume:
db_unavailable: "База даних сеансів недоступна."
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: "⚠️ Matrix /resume заблоковано: для цього іменованого сеансу не записано кімнату походження, тому Hermes за замовчуванням не відновить його в поточній кімнаті. Використайте `/resume --cross-room {name}`, якщо ви навмисно хочете перейти межі кімнат."
matrix_blocked_other_room: "⚠️ Matrix /resume заблоковано: цей сеанс належить іншій кімнаті Matrix ({room}). Використайте `/resume --cross-room {name}`, якщо ви навмисно хочете відновити його тут."
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 заблоковано: '**{name}**' належить іншому користувачу або чату. Відновлювати можна лише сеанси з цього чату."
no_named_sessions: "Іменованих сеансів не знайдено.\nВикористайте `/title Мій сеанс`, щоб назвати поточний сеанс, потім `/resume Мій сеанс`, щоб повернутися до нього."
all_requires_admin: "_Примітка: `--all` (список між чатами) потребує налаштованого адміністратора; показано лише сеанси цього чату._"
list_header: "📋 **Іменовані сеанси**\n"
list_item: "• **{title}**{preview_part}"
list_item_numbered: "{index}. **{title}**{preview_part}"
list_preview_suffix: " — _{preview}_"
list_footer: "\nВикористання: `/resume <назва сеансу>`"
list_footer_numbered: "\nВикористання: `/resume <назва сесії>` або `/resume <номер>` (наприклад, `/resume 1` для найновішої)"
list_failed: "Не вдалося отримати список сеансів: {error}"
out_of_range: "Індекс відновлення {index} поза межами діапазону.\nВикористовуйте `/resume` без аргументів, щоб переглянути доступні сесії."
not_found: "Сеанс, що відповідає '**{name}**', не знайдено.\nВикористайте `/resume` без аргументів, щоб побачити доступні сеанси."
already_on: "📌 Уже в сеансі **{name}**."
switch_failed: "Не вдалося переключити сеанс."
resumed_one: "↻ Сеанс **{title}** відновлено ({count} повідомлення). Розмову відновлено."
resumed_many: "↻ Сеанс **{title}** відновлено ({count} повідомлень). Розмову відновлено."
resumed_no_count: "↻ Сеанс **{title}** відновлено. Розмову відновлено."
msg_count_one: " ({count} повідомлення)"
msg_count_other: " ({count} повідомлень)"
retry:
no_previous: "Немає попереднього повідомлення для повторення."
unsafe: "Неможливо безпечно повторити це повідомлення: {error}"
failed_unchanged: "Повторити не вдалося; стенограму не змінено."
rollback:
not_enabled: "Контрольні точки не ввімкнено.\nУвімкніть у config.yaml:\n```\ncheckpoints:\n enabled: true\n```"
none_found: "Контрольних точок для {cwd} не знайдено"
invalid_number: "Недійсний номер контрольної точки. Використовуйте 1-{max}."
restored: "✅ Відновлено до контрольної точки {hash}: {reason}\nЗнімок перед відкатом збережено автоматично."
kept_user_edits: "↷ Ваші ручні правки збережено: {files}\nВикористайте /rollback <N> --all, щоб відновити і їх."
kept_oversize: "↷ Збережено (завеликий для контрольних точок, немає збереженої копії для відкату): {files}"
failed_deletes: "⚠️ Не вдалося видалити (залишено на місці): {files}"
restore_failed: "❌ {error}"
diff:
not_enabled: "Контрольні точки не ввімкнено, тому базової лінії сесії немає.\nУвімкніть у config.yaml:\n```\ncheckpoints:\n enabled: true\n```\nЗвичайний /diff все одно працює — він використовує git напряму."
no_changes: "Змін немає."
failed: "{error}"
err_default: "Не вдалося згенерувати diff"
more_untracked: "\n... і ще {count}"
untracked_label: "**Невідстежувані:**"
truncated_note: "\n... (скорочено — всього {lines} рядків; використайте /diff --stat для зведення)"
set_home:
save_failed: "Не вдалося зберегти головний канал: {error}"
success: "✅ Головний канал встановлено на **{name}** (ID: {chat_id}).\nCron-завдання та міжплатформні повідомлення доставлятимуться сюди."
err_missing_platform: "Не вказано логічну платформу"
err_relay_unauthenticated: "Ретранслятор не автентифікує цю логічну домашню ціль"
context:
header: "🧠 **Контекстне вікно**"
model: "Модель: `{model}`"
window: "Вікно: {total} токенів"
in_use: "Використано: {used} / {total} ({pct}%)"
bar: "{bar}"
headroom: "Запас до ліміту: {headroom} токенів"
threshold: "Автостиснення при: {threshold} ({threshold_pct}%) — залишилося {to_go}"
over_threshold: "⚠️ **Перевищено поріг автостиснення ({threshold}, {threshold_pct}%)**"
compressions: "Стиснень за цей сеанс: {count}"
last_savings: "Останнє стиснення звільнило: {savings}% контексту"
totals_header: "Підсумки сеансу (накопичено за {calls} викликів API)"
totals_line: "Вхідні {input} · Вихідні {output} · Міркування {reasoning}"
total_billed: "Усього виставлено: {total}"
throughput_note: "_Це пропускний обсяг, а не розмір контексту — кожен виклик повторно надсилає вікно, показане вище._"
estimated: "Орієнтовний контекст: ~{count} токенів у {messages} повідомленнях"
detail_after_first: "_(Повна статистика стиснення та пропускного обсягу доступна після першої відповіді агента)_"
no_data: "Даних про контекст поки немає. Надішліть повідомлення, щоб почати сеанс."
category:
system_prompt: "Системний промпт"
tool_definitions: "Визначення інструментів"
rules: "Правила"
skills: "Навички"
mcp: "MCP"
subagent_definitions: "Визначення субагентів"
memory: "Пам'ять"
conversation: "Розмова"
category_header: "Орієнтовне використання за категоріями"
no_data_yet: " (даних ще немає — спочатку надішліть повідомлення)"
free_space: "Вільне місце"
category_row: "{glyph} {label} ~{tokens} токенів ~{pct}%"
toolset_row: " {toolset} {count} інструментів ~{tokens} токенів"
not_available: "н/д"
skill_row: " {name} індекс ~{index_tokens} SKILL.md {md_tokens} токенів"
and_more: " … і ще {count}"
toolsets_title: "Набори інструментів за вартістю схеми (від найбільшого)"
skills_title: "Навички за вартістю (індекс = завжди в контексті; SKILL.md = вартість після завантаження)"
window_line: "Контекстне вікно: {mark}{used} / {max} токенів ({mark}{pct}%)"
source:
local_estimate: "локальна оцінка"
provider_usage: "дані провайдера"
provider_usage_plus_estimate: "дані провайдера + оцінка нових повідомлень"
source_line: "Джерело: {source}; кількість за категоріями — локальні оцінки."
hint_all: "Використайте /context all, щоб побачити вартість кожної навички та набору інструментів."
status:
header: "📊 **Стан Hermes Gateway**"
matrix_scope_header: "**Область 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 сесії:** `{session_id}`"
title: "**Назва:** {title}"
created: "**Створено:** {timestamp}"
last_activity: "**Остання активність:** {timestamp}"
model: "**Модель:** `{model}`"
model_provider: "**Модель:** `{model}` ({provider})"
context: "**Контекст:** {used} / {total} ({pct}%)"
context_used: "**Контекст:** ~{used} токенів"
tokens: "**Усього токенів виставлено за весь час:** {tokens} _(це не поточний розмір контексту; використайте `/context`)_"
agent_running: "**Агент активний:** {state}"
state_yes: "Так ⚡"
state_no: "Ні"
queued: "**Черга продовжень:** {count}"
platforms: "**Підключені платформи:** {platforms}"
discard:
nothing: "Нічого відкидати: у цьому чаті немає ходу, втраченого під час перезапуску."
done: "🗑️ Відкинуто втрачених ходів: {count}; їх не виконано повторно. Зараз буде відповідь на збережені повідомлення."
stop:
stopped_pending: "⚡ Зупинено. Агент ще не починав — можна продовжити цей сеанс."
stopped: "⚡ Зупинено. Можна продовжити цей сеанс."
no_active: "Немає активного завдання для зупинки."
force_stopped_pending: "⚡ Примусово зупинено. Агент ще запускався — сеанс розблоковано."
title:
db_unavailable: "База даних сеансів недоступна."
warn_prefix: "⚠️ {error}"
empty_after_clean: "⚠️ Після очищення назва порожня. Використовуйте друковані символи."
set_to: "✏️ Назву сеансу встановлено: **{title}**"
not_found: "Сеанс не знайдено в базі даних."
current_with_title: "📌 Сеанс: `{session_id}`\nНазва: **{title}**"
current_no_title: "📌 Сеанс: `{session_id}`\nНазву не встановлено. Використання: `/title Назва мого сеансу`"
topic:
not_telegram_dm: "Команда /topic доступна лише в приватних чатах Telegram."
no_session_db: "База даних сесій недоступна."
unauthorized: "Ви не маєте дозволу використовувати /topic у цьому боті."
restore_needs_topic: "Щоб відновити сесію, спочатку створіть або відкрийте Telegram topic, а потім надішліть /topic <session-id> у цьому topic. Щоб створити новий topic, відкрийте All Messages і надішліть там будь-яке повідомлення."
topics_disabled: "Telegram topics ще не ввімкнено для цього бота.\n\nЯк увімкнути:\n1. Відкрийте @BotFather.\n2. Виберіть свого бота.\n3. Відкрийте Bot Settings → Threads Settings.\n4. Увімкніть Threaded Mode і переконайтеся, що користувачам дозволено створювати нові threads.\n\nПотім надішліть /topic знову."
topics_user_disallowed: "Telegram topics увімкнено, але користувачам не дозволено створювати topics.\n\nВідкрийте @BotFather → виберіть свого бота → Bot Settings → Threads Settings, потім вимкніть 'Disallow users to create new threads'.\n\nПотім надішліть /topic знову."
enable_failed: "Не вдалося ввімкнути режим Telegram topic: {error}"
bound_status: "Цей topic пов'язано з:\nСесія: {label}\nID: {session_id}\n\nВикористовуйте /new, щоб замінити цей topic новою сесією.\nДля паралельної роботи відкрийте All Messages і надішліть там повідомлення, щоб створити інший topic."
thread_ready: "Багатосесійні Telegram topics увімкнено.\n\nЦей topic використовуватиметься як незалежна сесія Hermes. Використовуйте /new, щоб замінити поточну сесію цього topic. Для паралельної роботи відкрийте All Messages і надішліть там повідомлення, щоб створити інший topic."
untitled_session: "Сесія без назви"
restore_step_1: "1. Створіть або відкрийте topic. Щоб створити новий, відкрийте All Messages і надішліть там будь-яке повідомлення."
restore_step_2: "2. Надішліть /topic <session-id> усередині цього topic."
default_title: "Чат Hermes"
root_lobby: "Цей головний чат зарезервовано для системних команд.\n\nЩоб почати новий чат з Hermes, відкрийте topic All Messages угорі інтерфейсу бота й надішліть там будь-яке повідомлення. Telegram створить для нього новий topic; кожен topic працює як незалежний сеанс Hermes."
root_new: "Щоб почати новий паралельний чат з Hermes, відкрийте topic All Messages угорі інтерфейсу бота й надішліть там будь-яке повідомлення. Telegram створить для нього новий topic.\n\nКожен topic — це незалежний сеанс Hermes. Використовуйте /new усередині наявного topic лише якщо хочете замінити його поточний сеанс."
new_header: "У цьому topic розпочато новий сеанс Hermes.\n\nПорада: для паралельної роботи відкрийте All Messages і надішліть там повідомлення, щоб створити окремий topic, замість /new тут. /new замінює сеанс, прив'язаний до поточного topic."
help: "/topic — увімкнути багатосеансний режим у приватному чаті (один бот, багато паралельних чатів)\n\nВикористання:\n /topic Увімкнути режим topic або показати стан, якщо вже ввімкнено\n /topic help Показати це повідомлення\n /topic off Вимкнути режим topic і скинути прив'язки\n /topic <id> Усередині topic: відновити попередній сеанс за ID\n\nЯк це працює:\n1. Виконайте /topic один раз у цьому приватному чаті — Hermes перевірить, що в BotFather\n увімкнено Threads Settings, і ввімкне багатосеансний режим.\n2. Натисніть All Messages угорі бота й надішліть будь-яке повідомлення.\n Telegram створить для нього новий topic; кожен topic —\n незалежний сеанс Hermes (нова історія, новий контекст).\n3. Кореневий приватний чат стає системним лобі — надсилайте туди /topic, /status,\n /help, /usage. Звичайні запити пишіть у topic.\n4. /new усередині topic скидає лише сеанс цього topic.\n5. /topic <id> усередині topic відновлює в нього старий сеанс."
system_topic_name: "Система"
system_topic_intro: "Системний topic для команд і стану Hermes."
setup_image_caption: "BotFather → Bot Settings → Threads Settings"
no_chat_id: "Не вдалося визначити ID чату."
mode_not_enabled: "Багатосеансний режим topic для цього чату зараз не ввімкнено."
disable_failed: "Не вдалося вимкнути режим topic: {error}"
mode_disabled: "Багатосеансний режим topic для цього чату вимкнено.\n\nНаявні topics у Telegram не видаляються — вони просто перестануть працювати як окремі сеанси. Кореневий приватний чат знову працює як звичайний чат Hermes. Виконайте /topic, щоб увімкнути режим знову."
status_enabled: "Багатосеансні Telegram topics увімкнено."
status_how_to: "Щоб створити новий чат з Hermes, відкрийте All Messages угорі інтерфейсу бота й надішліть там будь-яке повідомлення. Telegram створить для нього новий topic."
previous_unlinked: "Попередні неприв'язані сеанси:"
restore_one: "Щоб відновити один із них:"
restore_example: "Приклад: надішліть /topic {session_id} усередині topic."
no_unlinked: "Попередніх неприв'язаних сеансів Telegram не знайдено."
restore_later: "Щоб відновити попередній сеанс пізніше:"
session_not_found: "Сеанс не знайдено: {session_id}"
not_telegram_session: "Це не сеанс Telegram, тому його не можна відновити в цьому topic."
not_your_session: "Цей сеанс не належить цьому користувачеві Telegram."
already_linked: "Цей сеанс уже прив'язано до іншого topic у Telegram."
restored: "Сеанс відновлено: {title}"
restored_last_message: "\n\nОстаннє повідомлення Hermes:\n{text}"
undo:
nothing: "Немає чого скасовувати."
removed: "↩️ Скасовано ходів: {turns} (повідомлень: {count}).\nРезервна копія: «{preview}»\nСкопіюйте/відредагуйте текст вище та надішліть його, щоб запитати знову звідси."
invalid_count: "Недійсне число «{arg}» — використовуйте /undo або /undo N."
update:
platform_not_messaging: "✗ /update доступний лише на платформах обміну повідомленнями. Виконайте `hermes update` у терміналі."
not_git_repo: "✗ Не git-репозиторій — оновлення неможливе."
hermes_cmd_not_found: "✗ Не вдалося знайти команду `hermes`. Hermes запущено, але команда оновлення не знайшла виконуваний файл у PATH або через поточний інтерпретатор Python. Спробуйте виконати `hermes update` вручну у вашому терміналі."
start_failed: "✗ Не вдалося запустити оновлення: {error}"
starting: "☤ Запуск оновлення Hermes… Я транслюватиму прогрес сюди."
reply_failed: "✗ Не вдалося надіслати відповідь процесу оновлення: {error}"
reply_sent: "✓ Надіслано `{label}` процесу оновлення."
failed_notice: "❌ Оновлення Hermes не вдалося; попередня версія працює далі. Виконайте `hermes update` на хості, щоб побачити повну помилку, або спробуйте /update пізніше."
prompt_default: " (за замовчуванням: {default})"
prompt: "☤ **Оновлення потребує вашої відповіді:**\n\n{prompt}{default_hint}\n\nВідповідайте `{prefix}approve` (так) або `{prefix}deny` (ні), або введіть відповідь напряму."
finished: "✅ Оновлення Hermes завершено."
timed_out: "❌ Час оновлення Hermes вичерпано через 30 хвилин."
finished_success: "✅ Оновлення Hermes успішно завершено."
last_lines: "{msg}\n\nОстанні рядки:\n```\n{tail}\n```"
managed_action: "оновити Hermes Agent"
not_applicable: "✗ `hermes update` не застосовується до цієї інсталяції ({method}).\nОновіть командою: {command}"
usage:
rate_limits: "⏱️ **Обмеження швидкості:** {state}"
header_session: "📊 **Використання токенів сеансу**"
label_model: "Модель: `{model}`"
label_input_tokens: "Вхідні токени: {count}"
label_cache_read: "Токени читання кешу: {count}"
label_cache_write: "Токени запису кешу: {count}"
label_output_tokens: "Вихідні токени: {count}"
label_total: "Усього: {count}"
label_api_calls: "Виклики API: {count}"
label_cost: "Вартість: {prefix}${amount}"
label_cost_included: "Вартість: включено"
label_context: "Контекст: {used} / {total} ({pct}%)"
label_compressions: "Стиснень: {count}"
breakdown_header: "🧩 **Розбивка контексту** _(оцінка)_"
breakdown_line: "• {label}: ~{count} ({pct}%)"
breakdown_cat_system_prompt: "Системний промпт"
breakdown_cat_tool_definitions: "Визначення інструментів"
breakdown_cat_rules: "Правила"
breakdown_cat_skills: "Навички"
breakdown_cat_mcp: "MCP"
breakdown_cat_subagent_definitions: "Визначення субагентів"
breakdown_cat_memory: "Пам'ять"
breakdown_cat_conversation: "Розмова"
header_session_info: "📊 **Інформація про сеанс**"
label_messages: "Повідомлень: {count}"
label_estimated_context: "Орієнтовний контекст: ~{count} токенів"
detailed_after_first: "_(Детальне використання доступне після першої відповіді агента)_"
no_data: "Дані про використання для цього сеансу відсутні."
unknown_subcommand: "Невідома підкоманда /usage: `{args}`. Спробуйте `/usage` або `/usage reset [--force]`."
reset_wrong_provider: "Накопичені скидання лімітів доступні лише з провайдером openai-codex. Спочатку перемкніться через `/model`."
credits:
not_logged_in: "Ви не ввійшли в Nous Portal. Увійдіть, щоб переглянути баланс кредитів і поповнити його."
verbose:
not_enabled: "Команду `/verbose` не ввімкнено для платформ обміну повідомленнями.\n\nУвімкніть у `config.yaml`:\n```yaml\ndisplay:\n tool_progress_command: true\n```"
mode_off: "⚙️ Прогрес інструментів: **OFF** — активність інструментів не показується."
mode_new: "⚙️ Прогрес інструментів: **NEW** — показується при зміні інструмента (довжина попереднього перегляду: `display.tool_preview_length`, за замовчуванням 40)."
mode_all: "⚙️ Прогрес інструментів: **ALL** — показується кожен виклик інструмента (довжина попереднього перегляду: `display.tool_preview_length`, за замовчуванням 40)."
mode_verbose: "⚙️ Прогрес інструментів: **VERBOSE** — кожен виклик інструмента з повними аргументами."
mode_log: "⚙️ Прогрес інструментів: **LOG** — тихо в чаті; виклики інструментів записуються до ~/.hermes/logs/tool_calls.log."
saved_suffix: "_(збережено для **{platform}** — набуде чинності з наступного повідомлення)_"
save_failed: "_(не вдалося зберегти у конфігурацію: {error})_"
voice:
enabled_voice_only: "Голосовий режим увімкнено.\nЯ відповідатиму голосом, коли ви надсилатимете голосові повідомлення.\nВикористайте /voice tts, щоб отримувати голосові відповіді на всі повідомлення."
disabled_text: "Голосовий режим вимкнено. Лише текстові відповіді."
tts_enabled: "Авто-TTS увімкнено.\nУсі відповіді міститимуть голосове повідомлення."
status_mode: "Голосовий режим: {label}"
status_channel: "Голосовий канал: #{channel}"
status_participants: "Учасники: {count}"
status_member: " - {name}{status}"
speaking: " (говорить)"
enabled_short: "Голосовий режим увімкнено."
disabled_short: "Голосовий режим вимкнено."
label_off: "Вимкнено (лише текст)"
label_voice_only: "Увімкнено (голосова відповідь на голосові повідомлення)"
label_all: "TTS (голосова відповідь на всі повідомлення)"
help: "{toggle}\n\n**Як працює /voice**\n• `/voice on` — голосова відповідь, коли ви надсилаєте голосове повідомлення\n• `/voice tts` — голосова відповідь на *кожне* повідомлення\n• `/voice off` — повернутися до відповідей лише текстом\n• `/voice status` — показати поточний режим\n• `/voice` (без аргументу) — швидке перемикання між увімк і вимк{channels}"
help_channels: "\n\n**Живі голосові канали (Discord)**\n• Спершу зайдіть у голосовий канал, потім `/voice channel` — я підключуся, слухатиму й відповідатиму голосом\n• `/voice leave` — від'єднатися від голосового каналу"
transcript_echo_short: "🎙️ «{text}»"
channel_unsupported: "Голосові канали не підтримуються на цій платформі."
channel_guild_only: "Ця команда працює лише на сервері Discord."
channel_not_in_voice: "Спершу потрібно зайти в голосовий канал."
channel_join_failed: "Не вдалося приєднатися до голосового каналу: {error}"
channel_deps_missing: "Відсутні голосові залежності (PyNaCl / davey). Виконайте: `{hint}`"
channel_join_permissions: "Не вдалося приєднатися до голосового каналу. Перевірте дозволи бота (Connect + Speak)."
channel_joined: "Приєднався до голосового каналу **{name}**.\nЯ озвучуватиму відповіді та слухатиму вас. Використайте /voice leave, щоб від'єднатися."
channel_not_joined: "Не в голосовому каналі."
channel_left: "Голосовий канал покинуто."
transcript_echo: "**[Голос]** <@{user}>: {text}"
yolo:
disabled: "⚠️ Режим YOLO для цього сеансу **ВИМКНЕНО** — небезпечні команди потребуватимуть схвалення."
enabled: "⚡ Режим YOLO для цього сеансу **УВІМКНЕНО** — усі команди схвалюються автоматично. Використовуйте з обережністю."
shared:
session_db_unavailable: "База даних сеансів недоступна."
session_db_unavailable_prefix: "База даних сеансів недоступна"
session_not_found: "Сеанс не знайдено в базі даних."
warn_passthrough: "⚠️ {error}"
unknown_error: "невідома помилка"
error_prefix: "Помилка: {error}"
history_unreadable: "⚠️ Зараз я не можу прочитати історію цієї розмови (ваші попередні повідомлення існують, але не завантажуються). Виконайте `hermes doctor --fix` на хості або використайте /new, щоб почати з чистого аркуша."
agent_running_retry_later: "Агент працює — дочекайтеся завершення ходу, потім /{command}."
none_marker: "(немає)"
none_value: "немає"
unknown_value: "невідомо"
exec_approval:
header: "Hermes хоче виконати команду, яка потребує вашого дозволу"
reason_label: "Чому позначено"
default_reason: "небезпечна команда"
smart_deny_line: "Smart DENY: перевизначення власника діє лише для цієї однієї операції."
smart_deny_heading: "⚠️ **Smart DENY — перевизначення власника для однієї операції:**"
timed_out_notice: "⌛ Час схвалення минув через {window} — команду НЕ виконано. Попросіть мене спробувати ще раз, якщо вона все ще потрібна, або збільште approvals.timeout у config.yaml."
timed_out_card_body: "{notice}\n```\n{command}\n```"
action_once: "Дозволити один раз"
action_session: "Дозволити на сеанс"
action_always: "Дозволяти завжди"
action_deny: "Відхилити"
deadline: "Якщо ви не відповісте протягом {window}, команду НЕ буде виконано."
text_choice_once: "Відповідайте `{prefix}approve`, щоб виконати один раз"
text_choice_session: "`{prefix}approve session`, щоб дозволити цей шаблон до кінця сеансу"
text_choice_always: "`{prefix}approve always`, щоб дозволити назавжди"
text_choice_deny: "`{prefix}deny`, щоб скасувати"
text_choice_joiner: ", "
text_choice_last: ", або {choice}.\n"
text_body: "{heading}\n```\n{command}\n```\n{reason_label}: {reason}\n\n"
notify:
media_kind:
audio: "аудіо"
video: "відео"
file: "файл"
image: "зображення"
media_delivery_failed: "⚠️ Не вдалося доставити вкладення ({kind})."
media_delivery_failed_with_name: "⚠️ Не вдалося доставити вкладення ({kind}: {file_name})."
delivery_failed_retry: "⚠️ Не вдалося доставити повідомлення після кількох спроб. Спробуйте ще раз — ваш запит оброблено, але відповідь не вдалося надіслати."
plain_fallback_prefix: "(Не вдалося відформатувати відповідь, звичайний текст:)\n\n{content}"
turn_error_no_details: "подробиць немає"
turn_error_detailed: "Вибачте, сталася помилка ({error_type}).\n{error_detail}\nСпробуйте ще раз або використайте /reset, щоб почати новий сеанс."
turn_error: "Вибачте, сталася помилка."
context_injection_refused: "Впровадження контексту відхилено."
no_home_channel: "📬 Для {platform} не задано головний канал. Головний канал — це місце, куди Hermes доставляє результати cron-завдань і міжплатформні повідомлення.\n\nВведіть {sethome_cmd}, щоб зробити цей чат головним каналом, або просто проігноруйте це повідомлення."
unauthorized:
action_notice: "Цей бот приватний, і вас немає в його списку дозволених. Якщо ви його власник, виконайте `hermes pairing approve {platform} <request-id>` на хості (`hermes pairing list` показує id)."
admin_only_can_run: "Вам доступні: "
admin_only_whoami_hint: ". Повний список — /whoami."
admin_only_none: "На цій платформі для не-адміністраторів не ввімкнено жодної slash-команди. Попросіть адміністратора додати вас до allow_admin_from або задати user_allowed_commands."
admin_only: "⛔ /{command} тут доступна лише адміністраторам. {suffix}"
owner_hint_env: "додайте ID до {env_var} у {home}/.env і перезапустіть шлюз"
owner_hint_generic: "додайте ID до списку дозволених користувачів цієї платформи і перезапустіть шлюз"
owner_notice: "Відхилено повідомлення від нерозпізнаного користувача {platform} {who}. Якщо це ви або хтось, кому ви довіряєте, {allowlist}; або задайте `unauthorized_dm_behavior: pair` для {platform} у {home}/config.yaml, щоб невідомі відправники отримували код зв'язування, який ви зможете схвалити командою `hermes pairing approve {platform} <code>`."
picker:
page_info: " ({start}–{end} з {total})"
clarify:
hint_single: "Відповідайте номером, текстом варіанта або власною відповіддю."
hint_multi: "Можна вибрати кілька — відповідайте номерами через кому або пробіл (напр. \"1, 3\"), текстом варіантів або власною відповіддю."
option_line: " {index}. {choice}"
question: "❓ {question}"
answered: "✅ відповідь: {response}"
cancelled: "↩️ Уточнення скасовано — ваше повідомлення буде оброблено як продовження."
expired: "⏳ Термін цього запиту минув — надішліть новий запит."
native_stream_placeholder: "💬 Очікую на ваш вибір..."
skip_hint: 'Відповідайте «skip», щоб пропустити це питання.'
errors:
rate_limited: "⏱️ Сервіс AI-моделі обмежує частоту запитів. Зачекайте трохи, а потім скористайтеся /retry."
auth_failed: "⚠️ Не вдалося ввійти в сервіс AI-моделі. Скористайтеся /login, щоб увійти знову, або попросіть того, хто адмініструє цього бота, виконати `hermes doctor` на хості."
bad_request: "⚠️ Сервіс AI-моделі відхилив цей запит. Спробуйте переформулювати повідомлення або скористайтеся /model, щоб змінити модель."
connection_interrupted: "⚠️ З'єднання із сервісом AI-моделі обірвалося посеред запиту — зазвичай це тимчасово. Скористайтеся /retry, щоб повторити; якщо повторюється, виконайте `hermes doctor` на хості."
unreachable: "⚠️ Сервіс AI-моделі зараз недоступний — налаштована кінцева точка моделі не запущена або до неї немає доступу. Зачекайте трохи та скористайтеся /retry; якщо проблема не зникає, виконайте `hermes doctor` на хості."
connection_unknown: "⚠️ Hermes не зміг з'єднатися із сервісом AI-моделі (SDK не надав подробиць). Скористайтеся /retry, щоб повторити; якщо проблема не зникає, виконайте `hermes doctor` на хості."
context_overflow: "⚠️ Ця розмова стала надто довгою, щоб я міг прочитати її цілком. Скористайтеся /compress, щоб скоротити історію, або /new, щоб почати нову розмову."
usage_limit_resets: "⏱️ Ліміт використання сервісу AI-моделі вичерпано; він скидається через {window}. Після цього скористайтеся /retry або /model, щоб змінити модель."
provider_kept_failing: "⚠️ Сервіс AI-моделі раз за разом повертав помилку. Скористайтеся /retry, щоб повторити, або /model, щоб змінити модель. Подробиці — в журналі шлюзу (`hermes logs`)."
session_storage_unavailable_disk: "⚠️ Сховище сеансів було тимчасово недоступне, тому цей хід зупинено, щоб захистити історію розмови. Перевірте вільне місце на диску, а потім надішліть повідомлення ще раз."
session_storage_unavailable: "⚠️ Сховище сеансів було тимчасово недоступне, тому цей хід зупинено, щоб захистити історію розмови. Ваше повідомлення вже мало б зберегтися — надішліть його ще раз за хвилину."
generic_failed: "⚠️ Щось пішло не так, і я не зміг завершити цю відповідь. Скористайтеся /retry, щоб повторити, або /new, щоб почати нову розмову. Технічні подробиці — в журналі шлюзу (`hermes logs`)."
interrupted_before_start: "⚠️ Ваше повідомлення було перервано ще до початку обробки (ймовірно, недавнім /stop). Надішліть його ще раз."
processing_incomplete: "обробку не завершено"
stopped_before_finishing: "⚠️ Мені довелося зупинитися, не завершивши{reason}. Скористайтеся /retry, щоб повторити, або /compress, якщо ця розмова стала дуже довгою."
no_response: "⚠️ Обробку завершено, але відповідь не згенеровано. Можливо, це тимчасова помилка — спробуйте надіслати повідомлення ще раз."
previous_turn_cleanup: "⚠️ Ваше повідомлення не оброблено (попередній хід ще завершувався). Надішліть його ще раз."
unexpected_silence: "⚠️ Модель повернула лише маркер мовчання на повідомлення, яке потребувало відповіді. Спробуйте ще раз або переформулюйте."
empty_response_model_label: "Модель"
hint_auth: " Ваш вхід у сервіс AI-моделі закінчився або API-ключ неправильний. Скористайтеся /login тут або виконайте `{relogin}` на хості."
hint_quota: " Баланс або квоту сервісу AI-моделі вичерпано. Поповніть їх на сайті сервісу або скористайтеся /model, щоб змінити модель."
hint_overloaded: " Сервіс AI-моделі тимчасово перевантажений. Зачекайте трохи, а потім скористайтеся /retry."
hint_rate_limited: " Частоту ваших запитів обмежено. Зачекайте трохи та спробуйте ще раз."
hint_usage_limit_resets: " Ліміт використання вашого плану вичерпано. Він скидається через ~{hours} год."
hint_usage_limit: " Ліміт використання вашого плану вичерпано. Зачекайте, доки він скинеться."
hint_rejected: " Сервіс AI-моделі відхилив запит."
generic_failed_with_hint: "⚠️ Щось пішло не так, і я не зміг завершити цю відповідь.{hint}\nСкористайтеся /retry, щоб повторити, або /new, щоб почати нову розмову. Технічні подробиці — в журналі шлюзу (`hermes logs`)."
history_unavailable: "⚠️ Історія цього сеансу тимчасово недоступна, тому це повідомлення не оброблено. Попросіть оператора перевірити state.db, а після відновлення надішліть повідомлення ще раз. Використовуйте /reset лише якщо справді хочете почати нову розмову."
no_credentials: "⚠️ Я не зміг з'єднатися із сервісом AI-моделі, тому це повідомлення не оброблено. Скористайтеся /login, щоб увійти знову, або /model, щоб вибрати іншу модель. Якщо помилка повторюється, виконайте `hermes doctor` на хості."
cron_session_read_only: "⚠️ Цей чат належить до запланованого завдання й виконує лише його, тому ваше повідомлення не було виконано. Почніть новий чат, щоб надіслати його."
workspace_unavailable: "⚠️ Робочої теки цього чату більше не існує ({path}), тому ваше повідомлення не було виконано. Створіть теку знову або перенесіть чат до іншої (`/worktree new` у CLI, «Move to project» в настільному застосунку), а потім надішліть повідомлення ще раз."
launch_credentials_unavailable: "⚠️ Цей чат більше не може використовувати ключ API, з яким його було розпочато{detail}, тому в ньому нічого не може виконуватися. Відкритий чат ніколи сам не перемикається на інший ключ, тож /retry завершиться так само. Скористайтеся /new, щоб почати новий чат із поточним ключем."
skills:
disabled: "Навичку **{name}** встановлено, але вимкнено.\nУвімкніть її командою: `hermes skills config`"
not_installed: "Навичка **{name}** доступна, але не встановлена.\nВстановіть її командою: `hermes skills install {install_name}`"
disabled_for_platform: "Навичку **{name}** вимкнено для {platform}.\nУвімкніть її командою: `hermes skills config`"
stacked_disabled: "Навички **{names}** у цьому складеному виклику вимкнено для {platform}.\nУвімкніть їх командою: `hermes skills config`"
stacked_load_failed: "Не вдалося завантажити складені навички для /{command}."
gate_off: "Схвалення записів навичок вимкнено (skills.write_approval). Увімкніть його командою /skills approval on, а потім переглядайте підготовлені записи тут через /skills pending."
unknown_subcommand: "Невідома підкоманда /skills на цій платформі. Доступні: pending, approve <id>, reject <id>, diff <id>, approval <on|off>. (Пошук і встановлення доступні лише в CLI.)"
diff_truncated: "\n… (скорочено — повний diff у ~/.hermes/pending/skills/{pending_id}.json)"
busy:
action_restarting: "перезапускається"
action_shutting_down: "завершує роботу"
reject_model: "Агент працює — зачекайте або спочатку виконайте /stop, а потім змінюйте модель."
reject_codex_runtime: "Агент працює — зачекайте або спочатку виконайте /stop, а потім змінюйте середовище виконання."
reject_moa: "Агент працює — зачекайте або спочатку виконайте /stop, а потім запускайте /moa."
drain_queued: "⏳ Шлюз {action} — повідомлення поставлено в чергу на перший хід після його повернення."
drain_rejected: "⏳ Шлюз {action} і зараз не приймає ще один хід."
drain_rejected_new_work: "⏳ Шлюз {action} і зараз не приймає нову роботу."
demoted_tail: " — ваше повідомлення в черзі й буде оброблене після завершення (щоб скасувати все, скористайтеся /stop)."
elapsed_min: "минуло {minutes} хв"
running_tool: "виконується: {tool}"
ack_detail_wrap: " ({detail})"
ack_detail_joiner: ", "
ack: "{head}{detail}{tail}"
steered_subagents_head: "⏩ Скеровано в поточний запуск і його активних субагентів"
steered_subagents_tail: ". Ваше повідомлення надійде після їхнього наступного виклику інструмента."
steered_head: "⏩ Скеровано в поточний запуск"
steered_tail: ". Ваше повідомлення надійде після наступного виклику інструмента."
redirected_head: "↪ Поточний запуск перенаправлено"
redirected_tail: ". Я скоригую роботу з урахуванням вашого виправлення."
subagent_working_head: "⏳ Субагент працює"
compressing_head: "⏳ Стискаю контекст"
queued_head: "⏳ У черзі на наступний хід"
queued_tail: ". Я відповім, щойно завершиться поточне завдання."
interrupting_head: "⚡ Перериваю поточне завдання"
interrupting_tail: ". Незабаром відповім на ваше повідомлення."
slash_rejected: "⏳ Агент працює — `/{command}` не можна виконати посеред ходу. Дочекайтеся поточної відповіді або спочатку виконайте `/stop`."
reject_goal: "Агент працює — під час виконання використовуйте /goal status / pause / clear / wait, або виконайте /stop, перш ніж ставити нову ціль."
reject_loop: "Агент працює — під час виконання використовуйте /loop status / pause / stop, або виконайте /stop, перш ніж задавати новий цикл."
draining_maintenance: "⏳ Цей агент завершує поточну роботу перед сервісною дією і зараз не приймає нових ходів. Він повернеться за мить — надішліть повідомлення трохи пізніше."
another_turn_running: "⏳ У цьому сеансі ще виконується інший хід. Щоб захистити стенограму, це повідомлення не оброблено. Дочекайтеся завершення активного ходу, а потім надішліть його ще раз."
behavior_queue_short: "ставить у чергу на наступний хід"
behavior_queue_long: "Поки Hermes зайнятий, повідомлення ставитимуться в чергу на наступний хід."
behavior_steer_short: "скеровує в поточний запуск (після наступного виклику інструмента)"
behavior_steer_long: "Повідомлення скеровуватимуться в поточний запуск (після наступного виклику інструмента)."
behavior_interrupt_short: "перериває поточний запуск"
behavior_interrupt_long: "Поки Hermes зайнятий, повідомлення перериватимуть поточний запуск."
status: "**Режим введення під час зайнятості: `{mode}`\nПовідомлення під час зайнятості: _{behavior}_\nЗмінити можна через `/busy queue`, `/busy steer` або `/busy interrupt`."
unknown_mode: "Невідомий режим `{arg}`. Використовуйте `/busy queue`, `/busy steer` або `/busy interrupt`."
save_failed: "Не вдалося зберегти режим введення під час зайнятості в конфігурацію. Режим не змінено."
set: "Режим введення під час зайнятості: **`{mode}`** (збережено).\n_{behavior}_"
pause:
resumed: "▶️ Відновлено — нова робота знову приймається."
not_paused: "Hermes не був на паузі."
reason_suffix: " (причина: {reason})"
already_paused: "⏸️ Hermes уже на паузі{suffix}. Скористайтеся `/pause off`, щоб відновити."
paused: "⏸️ Пауза{suffix}. Нові завдання cron, kanban і шлюзу призупинено; вже розпочата робота завершується як звичайно. Скористайтеся `/pause off`, щоб відновити."
queue:
usage: "Використання: /queue <prompt>"
queued: "Поставлено в чергу на наступний хід."
queued_depth: " (у черзі: {depth})"
steer:
usage: "Використання: /steer <prompt>"
usage_idle: "Використання: /steer <prompt> (агент не працює; надсилаю як звичайне повідомлення)"
queued_starting: "Агент ще запускається — /steer поставлено в чергу на наступний хід."
queued_no_agent: "Немає активного агента — /steer поставлено в чергу на наступний хід."
failed: "⚠️ Не вдалося скерувати: {error}"
rejected_empty: "Скерування відхилено (порожній вміст)."
target_subagents: "запуск і його активних субагентів"
target_run: "запуск"
queued: "⏩ Скерування поставлено в чергу в поточний {target} — надійде після наступного виклику інструмента: '{preview}'"
suggestions:
failed: "Команда пропозицій не вдалася: {error}"
blueprint:
failed: "Команда cron-шаблону не вдалася: {error}"
confirm:
destructive_prompt: "⚠️ **Підтвердження /{command}**\n\n{detail}\n\nОберіть:\n• **Схвалити один раз** — продовжити лише цього разу\n• **Завжди схвалювати** — продовжити та назавжди приховати цей запит\n• **Скасувати** — залишити поточну розмову\n\n_Текстова альтернатива: відповідайте `{prefix}approve`, `{prefix}always` або `{prefix}cancel`._"
destructive_optout: "\n\nℹ️ Надалі /clear, /new, /reset і /undo виконуватимуться без підтвердження. Увімкнути знову можна через `approvals.destructive_slash_confirm: true` у config.yaml."
destructive_optout_save_failed: "\n\n⚠️ Не вдалося зберегти це налаштування (config.yaml недоступний для запису), тому /clear, /new, /reset і /undo наступного разу знову запитають підтвердження. Щоб вимкнути його назавжди, встановіть `approvals.destructive_slash_confirm: false` у config.yaml."
cancelled: "🟡 /{command} скасовано. Розмова без змін."
detail_new: "Це почне новий сеанс і відкине поточну історію розмови."
detail_undo_one: "Це видалить з історії останній обмін репліками (ваше повідомлення та відповідь асистента)."
detail_undo_many: "Це видалить з історії останні {count} ходів користувача."
hooks:
command_blocked: "Команду `/{command}` заблокував хук."
prompt_command:
start_failed: "Не вдалося запустити /{command} — спробуйте ще раз."
learn:
ack_described: "Створюю навичку з того, що ви описали…"
ack_conversation: "Створюю навичку з цієї розмови…"
plan:
ack_task: "Планування: {task}"
ack_conversation: "Планую на основі контексту цієї розмови…"
init:
start_failed: "Не вдалося запустити /init — спробуйте ще раз."
ack_update: "Оновлюю AGENTS.md за результатами сканування проєкту…"
ack_generate: "Генерую AGENTS.md за результатами сканування проєкту…"
moa:
prepare_failed: "Не вдалося підготувати хід MoA."
quick_command:
no_output: "Команда не повернула виводу."
timed_out: "Час очікування швидкої команди минув (30 с)."
error: "Помилка швидкої команди: {error}"
no_command: "Для швидкої команди '/{command}' не визначено команду."
unsupported_type: "Швидка команда '/{command}' має непідтримуваний тип (підтримуються: 'exec', 'alias')."
no_target: "Для швидкої команди '/{command}' не визначено ціль."
unknown_command: "Невідома команда `/{command}`. Введіть /commands, щоб побачити доступні команди, або надішліть текст повторно без початкової косої риски, щоб відправити його як звичайне повідомлення."
session:
auto_reset_notice: "◐ Сеанс скинуто після зупинки. Історію розмови очищено.\nВикористайте /resume, щоб переглянути й відновити попередній сеанс.\n"
auto_reset_context_exhausted: "\n\n🔄 Сеанс автоматично скинуто — розмова перевищила максимальний розмір контексту, і стиснути її далі не вдалося. Ваше наступне повідомлення почне новий сеанс."
info_model: "◆ Модель: `{model}`"
info_provider: "◆ Провайдер: {provider}"
info_context: "◆ Контекст: {tokens} токенів ({source})"
info_acting_model: "◆ Робоча модель (оплачується за цей запуск): {provider}:{model}"
info_endpoint: "◆ Кінцева точка: {url}"
proxy:
requires_aiohttp: "⚠️ Режим проксі потребує aiohttp. Виконайте: {hint}"
url_missing: "⚠️ URL проксі не налаштовано (GATEWAY_PROXY_URL або gateway.proxy_url)"
http_error: "⚠️ Помилка проксі ({status}): {error}"
closed_early: "⚠️ З'єднання з проксі закрито до завершення відповіді"
connection_error: "⚠️ Помилка з'єднання з проксі: {error}"
no_response: "(Немає відповіді від віддаленого агента)"
progress:
status_fallback_long: "ще працюю"
status_fallback_short: "секунду"
stuck_warning: "⚠️ Здається, я застряг (немає активності {minutes} хв). Якщо протягом наступних {remaining} хв нічого не станеться, я припиню це завдання. Ви можете почекати ще, надіслати /stop, щоб скасувати його, або /new, щоб почати нову розмову."
timeout_header: "⏱️ Агент неактивний {minutes} хв — немає викликів інструментів чи відповідей API."
timeout_stuck_tool: "Схоже, агент застряг на інструменті `{tool}` ({seconds}с від останньої активності, {progress})."
timeout_last_activity: "Остання активність: {activity} ({seconds}с тому, {progress}). Можливо, агент очікував відповіді API."
timeout_hint: "Щоб збільшити ліміт, задайте agent.gateway_timeout у config.yaml (значення в секундах, 0 = без ліміту) і перезапустіть шлюз.\nСпробуйте ще раз або використайте /reset, щоб почати з чистого аркуша."
working_heartbeat: "⏳ Працюю — {minutes} хв{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: "виконується"
task_status_complete: "завершено"
task_status_error: "помилка"
task_line: "- {title} - {status}"
task_card_title: "Hermes працює"
pairing:
validity_hour: "{hours} година"
validity_hours: "{hours} годин"
code_reply: "Вітаю! Я вас ще не знаю, тому не можу відповісти, доки власник цього бота вас не схвалить.\n\nВаш код зв'язування: `{code}` (дійсний {validity})\n\nЯкщо цей бот запускаєте ви, відкрийте термінал і виконайте: `{approve_cmd}`. Інакше надішліть цю команду власникові бота. Після схвалення надішліть своє повідомлення ще раз."
rate_limited: "Зараз надто багато запитів на зв'язування. Зачекайте кілька хвилин і надішліть повідомлення ще раз."
shutdown:
action_shutting_down: "вимикається"
action_restarting: "перезапускається"
cron_interrupted: "⚠️ Заплановане завдання '{job}' перервано, бо Hermes {action}; цього разу результату немає. Воно знову виконається за розкладом, або запустіть його зараз командою `hermes cron run {job}`, коли Hermes знову запрацює."
notice_shutdown: "⚠️ Hermes вимикається — ваше поточне завдання буде перервано. Коли він знову буде онлайн, надішліть будь-яке повідомлення, і я спробую продовжити з того місця, де ми зупинилися."
notice_restart: "⚠️ Hermes перезапускається — ваше поточне завдання буде перервано. Після перезапуску надішліть будь-яке повідомлення, і я спробую продовжити з того місця, де ви зупинилися."
startup:
handoff_thread_title: "Hermes — {title}"
restarted: "♻ Шлюз успішно перезапущено. Ваш сеанс продовжується."
online: "♻️ Шлюз онлайн — Hermes повернувся й готовий до роботи."
db_corrupt: "⚠️ Виявлено пошкодження бази даних сеансів. Повідомлення можуть не зберігатися. Варіанти відновлення:\n1. Виконайте `hermes {profile_arg}doctor --fix`\n2. Зупиніть шлюз, потім відновіть командами:\n hermes {profile_arg}sessions recover --source {db_path} --inspect-only\n (якщо повідомляє, що відновлення можливе) hermes {profile_arg}sessions recover --source {db_path} --output recovered-state.db\n — відновлення спочатку робить знімок пошкодженого файлу; НЕ запускайте `sqlite3 ... \".recover\"` на робочому state.db — вразливий CLI sqlite3 може пошкодити його ще більше\n3. Відновіть із резервної копії в {backups_dir}/\nВиконайте `hermes {profile_arg}doctor` для очищеної діагностики."
db_fts_corrupt: "⚠️ База даних сеансів повідомила про пошкодження, обмежене пошуковим індексом (FTS5); таблиці повідомлень не пошкоджено. Повідомлення можуть не зберігатися, доки його не полагоджено: виконайте `hermes {profile_arg}doctor --fix`, потім перезапустіть шлюз. Не запускайте інструменти відновлення й не відновлюйте резервну копію, якщо `hermes {profile_arg}doctor` не підтвердить пошкодження."
db_then_restart: "{action} Потім `hermes {profile_arg}gateway restart`."
db_unavailable: "⚠️ База даних сеансів недоступна — повідомлення можуть не зберігатися, а /resume буде порожнім. Причина: {cause}. {action}"
cron_store:
unwritable: "⚠️ Сховище cron {store} недоступне для запису ({error}) з {since}. Заплановані завдання пропускаються, доки запис знову не стане можливим. Виправлення: {fix}."
recovered: "✅ Сховище cron {store} знову доступне для запису; пропущено запусків: {skipped}, кожне завдання буде виконано один раз."
whoami:
scope_dm: "DM"
scope_group: "група/канал"
header: "**Ви** — {platform} ({scope})\nID користувача: `{user_id}`\n"
tier_unrestricted: "Рівень: без обмежень (для цієї області не налаштовано список адміністраторів)\nСлеш-команди: усі доступні"
tier_admin: "Рівень: **адміністратор**\nСлеш-команди: усі доступні"
tier_user: "Рівень: користувач\nСлеш-команди, які ви можете виконувати: {commands}"
platform:
usage: "Використання: /platform <list|pause|resume> [name]\n /platform list — показати стан платформ\n /platform pause <name> — припинити повторні спроби для збійної платформи\n /platform resume <name> — повернути призупинену платформу в чергу"
header: "**Платформи шлюзу**"
connected: "Підключено: {platforms}"
reason_default: "призупинено"
reason_manual: "призупинено через /platform pause"
item_paused: " · {name} — ПРИЗУПИНЕНО ({reason}). Відновити: `/platform resume {name}`."
item_retrying: " · {name} — повторна спроба (спроба {attempts})"
none_failed: "Збійні/призупинені: (немає)"
usage_action: "Використання: /platform {action} <name>"
unknown: "Невідома платформа: {name}"
not_queued_pause: "{name} не в черзі повторних спроб (платформа або підключена, або не ввімкнена)."
already_paused: "{name} уже призупинено."
paused: "✓ {name} призупинено. Відновіть через `/platform resume {name}` або скиньте командою `hermes gateway restart`."
not_queued_resume: "{name} не в черзі повторних спроб — нічого відновлювати."
already_retrying: "{name} уже повторює спроби — відновлення не потрібне."
resumed: "✓ {name} відновлено — повторна спроба на наступному циклі спостерігача."
bundles:
unavailable: "Підсистема пакетів недоступна: {error}"
default_desc: "Завантажити {count} навичок"
none_plain: "Пакети навичок не встановлено.\nСтворіть пакет командою: hermes bundles create <name> --skill <s1> --skill <s2>\nКаталог: {dir}"
header_plain: "Пакети навичок (встановлено: {count}):"
item_plain: "/{slug} — {desc} ({count} навичок)"
invoke_hint_plain: "Викличте пакет через /<slug>, щоб завантажити всі його навички."
none: "Пакети навичок не встановлено.\nСтворіть пакет на хості командою:\n `hermes bundles create <name> --skill <s1> --skill <s2>`\nКаталог: `{dir}`"
header: "**Пакети навичок** (встановлено: {count}):"
item: "• `/{slug}` — {desc} _({count} навичок)_"
invoke_hint: "Викличте пакет через `/<slug>`, щоб завантажити всі його навички."
memory:
unknown_subcommand: "Невідома підкоманда /memory. Використовуйте: pending, approve <id>, reject <id>, approval <on|off>."
approvals:
admin_only: "Лише адміністратори шлюзу можуть змінювати постійний режим схвалення."
heartbeat:
unavailable: "Heartbeat недоступний (немає сеансу)."
paused: "⏸ Heartbeat призупинено: {prompt}"
none_set: "Heartbeat не задано."
no_resume: "Немає heartbeat для відновлення."
resumed: "▶ Heartbeat відновлено (кожні {interval}): {prompt}"
cleared: "✓ Heartbeat очищено."
usage: "Використання: /heartbeat every <interval> <prompt> (напр. /heartbeat every 10m Перевір CI)\nТакож: /heartbeat status | pause | resume | clear"
interval_too_small: "Інтервал надто малий — мінімум {min_seconds}с."
prompt_required: "Використання: /heartbeat every <interval> <prompt> — промпт обов'язковий."
invalid_prefix: "Недійсний heartbeat"
set: "♥ Heartbeat задано (кожні {interval}): {prompt}\nСпрацьовує як звичайний хід, щойно цей сеанс простоює й інтервал минув. Діє, поки працює шлюз — для довготривалих розкладів використовуйте `hermes cron`."
refine:
unavailable: "/refine недоступний (немає сеансу)."
nothing_yet: "Поки нема що опрацьовувати — спочатку надішліть повідомлення."
empty: "Поки нема що опрацьовувати — розмова порожня."
start_failed: "Не вдалося запустити /refine: {error}"
focus_suffix: " (фокус: {focus})"
started: "⚗ Переглядаю цю розмову у фоні{focus_suffix} — про всі оновлення пам'яті чи навичок повідомлю після завершення."
review:
unavailable: "/review недоступний (немає сеансу)."
nothing_yet: "Поки нема що переглядати — спочатку надішліть повідомлення."
start_failed: "Не вдалося запустити /review: {error}"
subgoal:
no_goal: "Немає активної цілі. Задайте її через /goal <text>."
usage_remove: "Використання: /subgoal remove <n>"
remove_not_int: "/subgoal remove: <n> має бути цілим числом (індекс від 1)."
removed: "✓ Видалено підціль {index}: {text}"
cleared_one: "✓ Очищено {count} підціль."
cleared_other: "✓ Очищено {count} підцілей."
none_to_clear: "Немає підцілей для очищення."
added: "✓ Додано підціль {index}: {text}"
loop:
unavailable: "Цикли недоступні."
no_session: "Цикли недоступні (немає активного сеансу)."
goal_defers_note: "\nПримітка: цим сеансом керує активна /goal — пробудження циклу відкладаються, доки ціль не завершиться, не буде призупинена або відкладена."
save:
no_messages: "Збережених повідомлень для цього сеансу ({session_id}) не знайдено."
no_adapter: "Не знайдено адаптер платформи для надсилання документа."
caption: "Експорт сеансу: {filename}"
complete: "Експорт завершено."
failed: "Помилка експорту сеансу: {error}"
sessions:
usage_search: "Використання: `/sessions search <query>`"
all_requires_admin: "_Примітка: `all` (список між чатами) потребує налаштованого адміністратора; показано лише сеанси цього чату._"
title_matching: "Сеанси за запитом «{query}»"
title_all: "Сеанси"
title_named: "Іменовані сеанси"
codex_runtime:
config_load_failed: "❌ Не вдалося завантажити конфігурацію: {error}"
topup:
header: "💳 **Баланс Nous**"
portal_link: "Керуйте оплатою на порталі: {url}"
hint: "Поповніть баланс і керуйте оплатою у браузері — після цього баланс тут оновиться."
login:
free_tier_remaining: "\nДеякі чати все ще на безкоштовному тарифі; використайте /model у тих чатах, щоб перемкнутися."
platform:
whatsapp:
clarify_other_title: "✏️ Інше"
clarify_other_description: "Введіть свою відповідь"
clarify_list_button: "Обрати"
clarify_list_section: "Варіанти"
approve_button: "✅ Схвалити"
deny_button: "❌ Відхилити"
slash_confirm_once: "✅ Схвалити один раз"
slash_confirm_always: "🔒 Завжди"
slash_confirm_cancel: "❌ Скасувати"
clarify_type_answer: "✏️ Введіть свою відповідь:"
approved: "✅ Схвалено."
denied: "❌ Відхилено."
approval_expired: "⌛ Час схвалення минув — команду не виконано (час уже вичерпано або її вирішено в іншому місці)."
yuanbao:
slow_response_notice: "Це завдання трохи складніше — я ще працюю над ним, зачекайте, будь ласка..."
owner_command_denied: "⚠️ {command} доступна лише творцеві в режимі приватного чату"
shared:
truncated_suffix: "\n...(скорочено)"
unknown: "невідомо"
approval_expired: "⌛ Час схвалення минув — команду не виконано (час уже вичерпано або її вирішено в іншому місці)."
model_picker_expired: "⏳ Цей вибір моделі застарів — виконайте /model ще раз."
not_authorized: "⛔ Немає доступу."
handoff:
default_name: "сеанс"
media:
image_failed: "⚠️ Не вдалося доставити вкладене зображення."
video_failed: "⚠️ Не вдалося доставити вкладене відео."
file_failed: "⚠️ Не вдалося доставити вкладений файл ({name})."
attachment_failed: "⚠️ Не вдалося доставити вкладення."
weixin:
voice_as_attachment: "[голосове повідомлення як вкладення]"
signal:
batch_pacing_notice: "(Надходять ще зображення — пауза ~{wait} через ліміт частоти Signal, пакет {batch}/{total}.)"
wait_seconds: "{count} с"
wait_minutes: "{count} хв"
api_server:
provider_auth_failed: "Не вдалося автентифікуватися у провайдера"
provider_rate_limited: "Провайдер обмежив частоту запитів"
provider_error_line: "⚠️ {label}: {error}"
transformed_notice: "\n\n[Відповідь перетворено після потокового виведення]\n"
discord:
approval:
question: "Дозволити Hermes виконати цю команду?"
requested_command_label: "Запитана команда:"
confirm_title: "Підтвердження"
already_resolved: "Це схвалення вже опрацьовано~"
expired: "⌛ Час схвалення минув — команду не виконано (час вичерпано або її вже опрацьовано в іншому місці)"
no_longer_pending: "⌛ Це схвалення більше не очікує відповіді (час минув або відповідь надано деінде)"
click_failed: "⚠️ Не вдалося записати ваш вибір. Натисніть ще раз або дайте відповідь командою /approve чи /deny."
by_user: "{label} — {user}"
resolved_once: "Схвалено один раз"
resolved_session: "Схвалено для сеансу"
resolved_always: "Схвалено назавжди"
resolved_deny: "Відхилено"
slash_confirm:
already_resolved: "Цей запит вже опрацьовано~"
approve_once: "Схвалити один раз"
always_approve: "Завжди схвалювати"
cancel: "Скасувати"
resolved_once: "Схвалено один раз"
resolved_always: "Схвалено назавжди"
resolved_cancel: "Скасовано"
prompt:
truncated_marker: "... [скорочено]"
clarify_title: "Hermes потребує вашої відповіді"
clarify_hint_buttons: "Виберіть варіант нижче або натисніть ✏️ Інше, щоб ввести власну відповідь."
clarify_hint_text: "Надішліть відповідь у цьому каналі."
default_hint: " (за замовчуванням: {default})"
update_title: "Оновлення потребує вашої відповіді"
expired_footer: "⏱ Час запиту минув — нічого не зроблено"
already_answered: "Відповідь уже надано~"
affirm: "Так"
negate: "Ні"
other: "✏️ Інше (ввести відповідь)"
clarify_already_answered: "На цей запит вже відповіли~"
answered_by: "Відповів {user}: {choice}"
awaiting_typed: "Очікуємо текстову відповідь від {user}…"
picker:
title: "⚙ Налаштування моделі"
select_provider: "Поточна модель: `{model}`\nПровайдер: {provider}\n\nВиберіть провайдера:"
unknown_model: "невідомо"
choice_default_title: "Виберіть варіант"
provider_option: "{provider} (моделей: {count})"
current: "поточна"
provider_placeholder: "Виберіть провайдера..."
cancel: "Скасувати"
model_placeholder: "Виберіть модель від {provider}"
back: "◀ Назад"
switch_anyway: "Усе одно перемкнути"
more_available: "Ще {count} доступно — введіть `/model <name>` напряму"
select_model: "Провайдер: **{provider}**\nВиберіть модель:{extra}"
already_resolved: "Уже опрацьовано~"
switching: "Перемикання на `{model}`..."
switching_title: "⚙ Зміна моделі"
switch_error: "Помилка зміни моделі: {error}"
switched_title: "⚙ Модель змінено"
expired_toast: "Час вибору моделі минув."
cancelled: "Вибір моделі скасовано."
expired: "⏱ Час вибору минув — модель не змінено."
choice_placeholder: "Виберіть варіант..."
choice_error: "Помилка застосування вибору: {error}"
choice_expired: "⏱ Час вибору минув — змін не внесено."
command:
new:
description: "Почати нову розмову"
followup: "Нову розмову почато~"
reset:
description: "Скинути ваш сеанс Hermes"
followup: "Сеанс скинуто~"
model:
description: "Показати або змінити модель"
arg_name: "Назва моделі (напр. anthropic/claude-sonnet-4). Залиште порожнім, щоб побачити поточну."
reasoning:
description: "Показати/змінити рівень міркувань або перемкнути їх показ"
arg_effort: "Рівень міркувань, reset, або show/hide, щоб показати чи сховати їх. Порожнє — поточне значення."
choice_none: "none — вимкнути міркування"
choice_ultra: "ultra — максимальні міркування"
choice_reset: "reset — скинути перевизначення цього сеансу"
choice_show: "show — показувати міркування у відповідях"
choice_hide: "hide — приховувати міркування у відповідях"
personality:
description: "Встановити особистість"
arg_name: "Назва особистості. Залиште порожнім, щоб побачити список доступних."
retry:
description: "Повторити ваше останнє повідомлення"
followup: "Повторюємо~"
undo:
description: "Видалити останній обмін"
status:
description: "Показати стан сеансу Hermes"
followup: "Стан надіслано~"
stop:
description: "Зупинити запущений агент Hermes"
followup: "Запит на зупинку надіслано~"
steer:
description: "Вставити повідомлення після наступного виклику інструмента (без переривання)"
arg_prompt: "Текст, який буде вставлено в наступний результат інструмента агента"
plan:
description: "Скласти план реалізації у markdown (без виконання)"
arg_task: "Що планувати. Залиште порожнім, щоб визначити з розмови."
compress:
description: "Стиснути контекст розмови"
title:
description: "Встановити або показати назву сеансу"
arg_name: "Назва сеансу. Залиште порожнім, щоб показати поточну."
resume:
arg_name: "Назва сеансу для відновлення. Залиште порожнім, щоб показати список сеансів."
usage:
description: "Показати використання токенів у цьому сеансі"
help:
description: "Показати доступні команди"
insights:
arg_days: "Кількість днів для аналізу (за замовчуванням: 7)"
reload_skills:
description: "Пересканувати ~/.hermes/skills/ на нові або видалені навички"
voice:
description: "Перемкнути режим голосових відповідей"
arg_mode: "Голосовий режим: join, channel, leave, on, tts, off або status"
choice_join: "join — приєднатися до вашого голосового каналу"
choice_channel: "channel — приєднатися до вашого голосового каналу (псевдонім)"
choice_leave: "leave — вийти з голосового каналу"
choice_mode_on: "on — голосова відповідь на голосові повідомлення"
choice_tts: "tts — голосова відповідь на всі повідомлення"
choice_mode_off: "off — лише текст"
choice_status: "status — показати поточний режим"
update:
followup: "Оновлення запущено~"
restart:
description: "Коректно перезапустити шлюз Hermes"
followup: "Запит на перезапуск надіслано~"
approve:
arg_scope: "Необов'язково: 'all', 'session', 'always', 'all session', 'all always'"
deny:
description: "Відхилити небезпечну команду, що очікує схвалення"
arg_scope: "Необов'язково: 'all', щоб відхилити всі команди в очікуванні"
thread:
description: "Створити новий тред і почати в ньому сеанс Hermes"
arg_name: "Назва треду"
arg_message: "Необов'язкове перше повідомлення для Hermes у треді"
arg_auto_archive: "Автоархівація через N хвилин (60, 1440, 4320, 10080)"
error_unknown: "невідома помилка"
failed: "Не вдалося створити тред: {error}"
created: "Створено тред {link}"
error_name_required: "Потрібно вказати назву треду."
error_invalid_archive: "auto_archive_duration має бути одним із: {allowed}."
error_no_channel: "Не вдалося визначити поточний канал Discord."
error_dm_not_supported: "Треди Discord можна створювати лише в текстових каналах сервера, не в особистих повідомленнях."
error_no_parent: "Не вдалося визначити батьківський текстовий канал для нового треду."
error_both_failed: "Discord відхилив пряме створення треду, і резервний спосіб також не спрацював. Помилка прямого способу: {direct_error}. Помилка резервного способу: {fallback_error}"
queue:
description: "Поставити запит у чергу на наступний хід (не перериває)"
arg_prompt: "Запит, який потрібно поставити в чергу"
followup: "Поставлено в чергу на наступний хід."
bg:
arg_prompt: "Запит, який потрібно виконати у фоні"
followup: "Фонове завдання запущено~"
btw:
description: "Поставити побіжне питання щодо поточної розмови"
arg_question: "Побіжне питання, на яке відповісти без переривання роботи"
followup: "Побіжне питання надіслано~"
skill:
description: "Запустити навичку Hermes"
arg_name: "Яку навичку запустити"
arg_args: "Необов'язкові аргументи для навички"
unknown: "Невідома навичка: `{name}`. Почніть вводити, щоб побачити підказки автодоповнення."
auto_args_description: "Аргументи: {args_hint}"
auto_description_fallback: "Виконати /{name}"
limits:
response_truncated: "⚠️ **Відповідь обрізано** — вона перевищила ліміт доставки ({max_messages} повідомлень). {dropped_chars} символів не доставлено; повна відповідь є в журналах сеансу."
forum:
default_title: "Новий допис"
voice:
ack_1: "Зараз подивлюся."
ack_2: "Хвилинку."
ack_3: "Зараз це перевірю."
ack_4: "Секундочку."
ack_5: "Вже роблю."
left_inactivity: "Вийшов із голосового каналу (тайм-аут бездіяльності)."
security:
unauthorized_slash_alert: "⚠️ Неавторизована спроба slash-команди в Discord\nКористувач: {user_name} ({user_id})\nКанал: {chan_id} (сервер {guild_id})\nКоманда: {command_text}\nПричина: {reason}"
thread:
seed_message: "🧵 Тред створено Hermes: **{name}**"
default_name: "Hermes"
handoff_seed: "🧵 Передача від Hermes: **{name}**"
auto_create_failed: "⚠️ Hermes не вдалося створити тред Discord для цього повідомлення, тому запит не оброблено. Спробуйте ще раз."
auto_create_failed_generic: "Запит не оброблено. Спробуйте ще раз."
media:
upload_too_large: "⚠️ Не вдалося прикріпити `{filename}` — {size_mb} МБ перевищує ліміт Discord у {limit_mb} МБ для завантажень у цьому каналі. Стисніть файл або поділіться посиланням."
image_skipped_too_large: "⚠️ Пропущено `{filename}` — {size_mb} МБ перевищує ліміт Discord у {limit_mb} МБ для завантажень."
telegram:
approval:
action_once: "✅ Один раз"
action_session: "✅ Сеанс"
action_always: "✅ Завжди"
action_deny: "❌ Відхилити"
toast_invalid_data: "Недійсні дані схвалення."
toast_already_resolved: "Це схвалення вже опрацьовано."
resolved_once: "✅ Схвалено один раз"
resolved_session: "✅ Схвалено для сеансу"
resolved_always: "✅ Схвалено назавжди"
resolved_deny: "❌ Відхилено"
resolved_generic: "Опрацьовано"
resolved_by_user: "{label} — {user}"
expired: "⌛ Час схвалення минув"
expired_detail: "{label} — жодна команда не очікувала. Час уже вичерпано (і команду відхилено) або її опрацювали в іншому місці."
slash_confirm:
approve_once: "✅ Схвалити один раз"
always_approve: "🔒 Завжди схвалювати"
cancel: "❌ Скасувати"
already_resolved: "Цей запит вже опрацьовано."
resolved_once: "✅ Схвалено один раз"
resolved_always: "🔒 Завжди схвалювати"
resolved_cancel: "❌ Скасовано"
picker:
expired_rerun: "Час вибору минув — виконайте команду ще раз."
invalid_selection: "Недійсний вибір."
expired: "Час вибору минув."
apply_error: "Помилка застосування вибору: {error}"
prev: "◀ Назад"
next: "Далі ▶"
back: "◀ Повернутися"
cancel: "✗ Скасувати"
more_available: "Ще {count} доступно — введіть `/model <name>` напряму"
title: "Налаштування моделі"
provider_label: "Провайдер: {provider}"
select_model: "Виберіть модель:"
current_model: "Поточна модель: {model}"
select_provider: "Виберіть провайдера:"
unknown_model: "невідомо"
provider_family: "Сімейство провайдерів: {family}"
invalid_model_index: "Недійсний індекс моделі."
switch_error: "Помилка зміни моделі: {error}"
switch_failed: "Не вдалося перемкнути."
switched: "Модель змінено!"
invalid_page: "Недійсна сторінка."
expired_model: "Час вибору минув — виконайте /model ще раз."
provider_not_found: "Провайдера не знайдено."
switch_anyway: "Усе одно перемкнути"
confirm_selection: "Підтвердьте вибір моделі"
group_not_found: "Групу не знайдено."
cancelled: "Вибір моделі скасовано."
prompt:
default_hint: " (за замовчуванням: {default})"
update_header: "Оновлення потребує вашої відповіді:"
affirm: "✓ Так"
negate: "✗ Ні"
other: "✏️ Інше (ввести відповідь)"
expired_toast: "⚠️ Час цього запиту минув — виконайте /retry."
expired_body: "⚠️ Час цього питання минув або сеанс скинуто — виконайте /retry."
type_answer: "✏️ Введіть відповідь у чаті."
awaiting_typed: "Очікуємо текстову відповідь від {user}…"
invalid_choice: "Недійсний вибір."
update_sent: "«{answer}» надіслано процесу оновлення."
update_answered: "Відповідь на запит оновлення: {answer}"
affirm_word: "Так"
negate_word: "Ні"
media:
download_failed: "⚠️ Не вдалося завантажити {kind}{name} ({error}). Спробуйте надіслати ще раз."
named_suffix: " ({name})"
kind_attachment: "вкладення"
kind_photo: "фото"
kind_voice: "голосове повідомлення"
kind_audio: "аудіофайл"
kind_video: "відеофайл"
gmail_triage:
done_send: "✓ чернетку надіслано"
done_archive: "✓ архівовано"
done_draft: "✓ чернетку відповіді створено"
done_spam: "✓ позначено як спам"
done_mute: "✓ вимкнено сповіщення"
done_mute_domain: "✓ домен вимкнено"
done_trust: "✓ довірено"
done_trust_domain: "✓ домен довірено"
done_vip: "✓ позначено VIP"
done_vip_domain: "✓ домен позначено VIP"
invalid_data: "Недійсні дані gmail-triage."
unknown_verb: "Невідома дія: {verb}"
script_missing: "❌ {script} відсутній"
exit_code: "код виходу {code}"
failed: "❌ {verb}: не вдалося: {detail}"
timed_out: "❌ {verb}: час вичерпано"
error: "❌ {verb}: помилка: {error}"
appended_by: "— {label} — {user}"
user_fallback: "Користувач"
install_hint: "Виконайте `hermes setup`, щоб установити підтримку Telegram."
slack:
approval:
fallback_text: "⚠️ Потрібне схвалення команди: {command}"
resolved_once: "✅ Схвалено один раз: {user}"
resolved_session: "✅ Схвалено на сеанс: {user}"
resolved_always: "✅ Схвалено назавжди: {user}"
resolved_deny: "❌ Відхилено: {user}"
confirm:
default_title: "Підтвердження"
approve_once: "Схвалити один раз"
always_approve: "Завжди схвалювати"
cancel: "Скасувати"
resolved_always: "🔒 Схвалено назавжди: {user}"
resolved_cancel: "❌ Скасовано: {user}"
picker:
more_available: "\n*Ще {count} доступно — введіть `/model <name>` напряму*"
provider_header: "*⚙ Налаштування моделі*\nПоточна модель: `{model}`\nПровайдер: {provider}\n\nВиберіть провайдера:{extra}"
model_header: "*⚙ Налаштування моделі*\n\nПровайдер: *{provider}*\nВиберіть модель:{extra}"
choose_provider: "Виберіть провайдера…"
choose_model: "Виберіть модель від {provider}…"
cancel: "Скасувати"
back: "◀ Назад"
fallback_provider: "⚙ Налаштування моделі — виберіть провайдера"
fallback_model: "⚙ Налаштування моделі — {provider}"
cancelled: "❌ Вибір моделі скасовано."
no_models_for_provider: "Для `{provider}` немає доступних моделей."
switching: "⚙ Перемикаємося на `{model}`…"
switch_failed: "❌ Не вдалося змінити модель: {error}"
switch_failed_header: "⚙ Не вдалося змінити модель"
switched_header: "⚙ Модель змінено"
clarify:
option_n: "Варіант {n}"
choice_n: "вибір {n}"
other: "✏️ Інше…"
expired: "⏳ Час цього запиту минув — надішліть новий запит. (від {user})"
awaiting: "✏️ Очікуємо текстову відповідь від {user}…"
resolved: "✅ {user}: {choice}"
feedback:
good: "Гарна відповідь"
good_a11y: "Надіслати позитивний відгук про цю відповідь"
bad: "Погана відповідь"
bad_a11y: "Надіслати негативний відгук про цю відповідь"
status:
thinking: "думає..."
still_working: "ще працює… ({elapsed})"
task_card:
title: "Hermes працює"
slash:
reply_truncated: "\n\n_[Відповідь обрізано: ще {count} частин(и) перевищили ліміт ефемерних відповідей Slack.]_"
running: "Виконуємо `/{command}`…"
handoff:
seed: ":thread: Передача Hermes — *{name}*"
matrix:
handoff:
default_name: "Сеанс Hermes"
media:
image_download_failed: "Не вдалося завантажити зображення та вивантажити його в Matrix. URL джерела не показано, оскільки він може містити приватні токени."
approval:
typed_hint_once: "Відповідьте `!approve`, щоб виконати один раз, або `!deny`, щоб скасувати."
typed_hint_session: "Відповідьте `!approve session`, щоб схвалити цей шаблон на сеанс, `!approve`, щоб виконати один раз, або `!deny`, щоб скасувати."
typed_hint_always: "Відповідьте `!approve session`, щоб схвалити цей шаблон на сеанс, `!approve always`, щоб схвалити назавжди, `!approve`, щоб виконати один раз, або `!deny`, щоб скасувати."
legend_intro: "Також можна натиснути реакцію, щоб схвалити:"
legend_once: "✅ = схвалити один раз"
legend_session: "🌀 = схвалити на цей сеанс"
legend_always: "♾️ = схвалювати завжди"
legend_deny: "❎ = відхилити"
invalid_reaction: "Ця реакція не підходить для цього запиту на схвалення."
expired: "Час цього запиту на схвалення минув. Виконайте команду ще раз, якщо все ще хочете її схвалити."
picker:
no_models: "Для цього сеансу немає доступних автентифікованих моделей."
title: "⚙ **Налаштування моделі**"
current_model: "Поточна модель: `{model}`"
provider: "Провайдер: {provider}"
react_model: "Поставте реакцію, щоб вибрати модель:"
react_choice: "Поставте реакцію, щоб вибрати."
current_suffix: "{label} ← поточна"
invalid_model_reaction: "Ця реакція не відповідає жодній із доступних моделей."
invalid_choice_reaction: "Ця реакція не відповідає жодному з доступних варіантів."
verb_switch_model: "змінити модель"
verb_apply_selection: "застосувати вибір"
failed: "Не вдалося {action}: {error}"
reaction:
unauthorized: "Ці елементи керування доступні лише авторизованому користувачу Matrix."
not_requester: "Ці елементи керування доступні лише користувачу, який запросив цю дію."
feishu:
clarify:
title: "Hermes потребує вашої відповіді"
other: "✏️ Інше (ввести відповідь)"
awaiting_typed: "Очікуємо текстову відповідь від {user}…"
picker:
apply_error: "Помилка застосування вибору: {error}"
approval:
action_session: "На сеанс"
action_always: "Завжди"
resolved_once: "Схвалено один раз"
resolved_session: "Схвалено на сеанс"
resolved_always: "Схвалено назавжди"
resolved_deny: "Відхилено"
resolved_fallback: "Вирішено"
resolved_by_user: "{icon} **{label}** — {user}"
update_prompt:
title: "☤ Оновлення потребує вашої відповіді"
default_hint: "\n\nЗа замовчуванням: `{default}`"
answer_yes: "✓ Так"
answer_no: "✗ Ні"
word_yes: "Так"
word_no: "Ні"
answered_title: "{icon} Відповідь на запит оновлення: {answer}"
answered_by: "Відповів(ла) **{user}**"
media:
gif_downgraded: "[GIF надіслано як файл]"
gif_downgraded_caption: "[GIF надіслано як файл]\n{caption}"
google_chat:
clarify:
other_button: "Інше / ввести відповідь"
header: "Питання"
question: "❓ {question}"
typing:
thinking: "Hermes думає…"
interrupted: "(перервано)"
no_reply: "(без відповіді)"
attachment_fallback:
header: "⚠️ Не вдалося прикріпити **{filename}**."
explain: "Google Chat дозволяє прикріплювати файли лише тоді, коли бот має ваш явний дозвіл (OAuth користувача). Це одноразова згода, яку можна надати з цього чату."
activate: "**Щоб увімкнути:** надішліть `/setup-files` і дотримуйтеся інструкцій."
host_path: "Тим часом файл лежить на хості: `{path}`"
setup_files:
not_configured: "🔧 Нативна доставка вкладень **не налаштована**.\n**Крок 1 (одноразово, на хості):** створіть облікові дані клієнта OAuth на https://console.cloud.google.com/apis/credentials → *Create credentials* → *OAuth client ID* → *Desktop app*. Завантажте JSON. Потім на хості виконайте:\n```\npython -m plugins.platforms.google_chat.oauth --client-secret /path/to/client_secret.json\n```\n**Крок 2:** поверніться сюди й надішліть `/setup-files start`."
start_instructions: "1. Відкрийте цей URL у браузері й авторизуйтеся:\n{auth_url}\n\n2. Після натискання *Allow* браузер не зможе завантажити `http://localhost:1/?...&code=...`. Це очікувано.\n\n3. Скопіюйте весь URL, що не завантажився, з адресного рядка браузера і вставте його сюди як: `/setup-files <PASTE_URL>` (або лише значення `code=...`).\n\nПорада: URL містить ваш дозвіл на доступ — не діліться ним."
start_failed: "❌ Не вдалося згенерувати URL OAuth. Перевірте журнали шлюзу та переконайтеся, що client_secret.json коректний."
exchange_failed: "❌ Не вдалося обміняти токен. Можливо, код застарів або URL пошкоджений. Надішліть `/setup-files start`, щоб отримати новий URL OAuth."
revoke_completed: "Відкликання завершено (деякі кроки могли бути пропущені)."
revoked: "Відкликано."
helper_error: "❌ Помилка: {error}"
revoke_error: "❌ Помилка відкликання: {error}"
who_shared: "спільний (застарілий)"
active: "✅ Нативна доставка вкладень **активна** для `{who}`.\nТокен: `{token_path}`\nНадішліть `/setup-files revoke`, щоб вимкнути."
not_authorized_yet: "🔧 Облікові дані клієнта збережено, але ви ще не авторизувалися. Надішліть `/setup-files start`, щоб почати."
no_client_credentials: "⚠️ Для цього профілю не збережено облікових даних клієнта. Надішліть `/setup-files` (без аргументів), щоб отримати інструкції з налаштування."
done_output: "✅ Готово.\n```\n{output}\n```"
authorized: "✅ Авторизовано! Нативна доставка вкладень тепер активна. Спробуйте попросити мене надіслати вам PDF."
exchanged_not_loaded: "⚠️ Токен обміняно, але шлюз не зміг завантажити нові облікові дані в пам'ять. Перезапустіть шлюз — токен у `{token_path}` буде підхоплено.\nВивід допоміжного скрипта:\n```\n{output}\n```"
teams:
approval:
resolved_once: "✅ Дозволено (один раз)"
resolved_session: "✅ Дозволено (сеанс)"
resolved_always: "✅ Дозволено завжди"
resolved_deny: "❌ Відхилено"
unknown_action: "Невідома дія."
requires_allowlist: "⛔ Для кнопок схвалення потрібно налаштувати TEAMS_ALLOWED_USERS."
summary:
title: "Зустріч {meeting_id}"
title_fallback: "підсумок"
heading: "Підсумок"
summary_line: "Підсумок: {summary}"
empty: "Підсумок недоступний."
none_item: "Немає"
key_decisions: "Ключові рішення"
action_items: "Завдання до виконання"
risks: "Ризики"
line:
pending:
still_thinking: "🤔 Ще думаю. Натисніть нижче, щоб отримати відповідь, коли вона буде готова."
button_label: "Отримати відповідь"
delivered: "Уже відповів ✅"
interrupted: "Виконання перервано до завершення."
expired: "Термін дії цього запиту минув — надішліть повідомлення ще раз."
standalone:
attachments_not_deliverable: "[Згенеровано вкладень: {count}; не можна доставити з cron]"
wecom:
media:
kind_image: "Зображення"
kind_video: "Відео"
kind_voice: "Голосове повідомлення"
file_too_large: "Розмір файлу {size_mb} МБ перевищує ліміт WeCom у 20 МБ, тому надіслати його не можна. Спробуйте стиснути файл або зменшити його розмір."
voice_format_downgraded: "Формат голосу {content_type} не підтримується (WeCom приймає лише AMR); надіслано як файл."
size_downgraded: "{label}: розмір {size_mb} МБ перевищує ліміт {cap}; надіслано як файл."
email:
image_line: "Зображення: {url}"
standalone_subject: "Hermes Agent"
dingtalk:
emotion:
thinking: "🤔Думаю"
done: "🥳Готово"
irc:
quit_message: "Hermes Agent завершує роботу"
standalone_quit: "доставлено"
relay:
confirm_approve_once: "Схвалити один раз"
confirm_always_approve: "Завжди схвалювати"
confirm_cancel: "Скасувати"
prompt_other: "✏️ Інше (ввести відповідь)"
prompt_expired: ⌛ Цей запит більше не очікує відповіді. Надішліть відповідь звичайним повідомленням.
slash:
rewind:
description: "Відкотитися до попереднього запиту, щоб відредагувати й надіслати його знову, або відгалузитися звідти (Esc Esc)"
approve:
description: "Схвалити небезпечну команду, що очікує"
bg:
description: "Виконати запит в окремому фоновому сеансі"
insights:
description: "Показати аналітику використання"
reload_mcp:
description: "Перезавантажити MCP-сервери з конфігурації"
resume:
description: "Відновити раніше названий сеанс"
sethome:
description: "Зробити цей чат головним каналом"
update:
description: "Оновити Hermes Agent до найновішої версії"
category:
session: "Сеанс"
configuration: "Конфігурація"
info: "Інформація"
tools_skills: "Інструменти й навички"
plugins: "Плагіни"
exit: "Вихід"
context: "Контекст"
background_automation: "Фон і автоматизація"
shared:
usage_suffix: "{description} (використання: /{name} {args_hint})"
alias_for: "{description} (псевдонім для /{name})"
alias_note: " (псевдонім: {aliases})"
slack_alias_for: "Псевдонім для /{name} — {description}"
plugin_default_desc: "Виконати /{name}"
plugin_command_desc: "Команда плагіна"
hermes:
description: "Поговорити з Hermes або виконати підкоманду"
start:
description: "Підтвердити стартові пінги платформи без відповіді"
new:
description: "Почати новий сеанс (новий ID сеансу та історія)"
topic:
description: "Увімкнути або переглянути сеанси в topic-ах приватних чатів Telegram"
clear:
description: "Очистити екран і почати новий сеанс"
redraw:
description: "Примусово перемалювати інтерфейс (виправляє збої відображення в терміналі)"
history:
description: "Показати історію розмови"
save:
description: "Експортувати поточну розмову (/save без аргументів показує використання)"
retry:
description: "Повторити останнє повідомлення (надіслати агентові знову)"
prompt:
description: "Скласти наступний запит у $EDITOR (markdown) і надіслати його"
undo:
description: "Відкотити N ходів користувача та запитати знову (типово 1)"
title:
description: "Задати назву поточного сеансу"
handoff:
description: "Передати цей сеанс на платформу повідомлень (Telegram, Discord тощо)"
branch:
description: "Розгалузити поточний сеанс (новий тред у Discord/Telegram/Slack/Matrix; --here залишає тут)"
worktree:
description: "Показати, перелічити, створити або очистити ізольовані робочі дерева git"
compress:
description: "Стиснути контекст розмови (додайте 'here [N]', щоб зберегти останні N ходів; --preview показує, що станеться)"
rollback:
description: "Перелічити або відновити контрольні точки файлової системи (ручні правки зберігаються; --all перезаписує їх)"
snapshot:
description: "Створити або відновити знімки конфігурації та стану Hermes"
export:
description: "Експортувати профіль (конфігурація, навички, тема) в архів для обміну"
import:
description: "Імпортувати спільний архів профілю як новий профіль"
stop:
description: "Зупинити всі фонові процеси, що виконуються"
discard:
description: "Відкинути хід, втрачений під час перезапуску Hermes, щоб черга цього чату продовжилася"
pause:
description: "Призупинити нову роботу глобально (аварійна зупинка); '/pause off' відновлює"
deny:
description: "Відхилити небезпечну команду, що очікує (за бажанням із причиною)"
btw:
description: "Поставити побіжне питання про поточну розмову, не перериваючи її"
agents:
description: "Показати активних агентів і поточні завдання"
journey:
description: "Відкрити хронологію шляху навчання"
queue:
description: "Поставити запит у чергу на наступний хід або list/edit/rm/move/clear для запитів у черзі"
steer:
description: "Вставити повідомлення після наступного виклику інструмента без переривання"
goal:
description: "Задати постійну ціль, над якою Hermes працює між ходами до її досягнення"
heartbeat:
description: "Задати повторюваний запит, що повертається в цей сеанс під час простою"
refine:
description: "Переглянути цю розмову зараз і зберегти висновки в пам'яті та навичках"
review:
description: "Запустити незалежного субагента для перевірки обговореної роботи (PR, код, документація)"
loop:
description: "Повторно виконувати запит із заданим інтервалом у цьому сеансі"
plan:
description: "Записати план реалізації в markdown до .hermes/plans/, нічого не виконуючи"
moa:
description: "Виконати один запит через типовий пресет Mixture of Agents, потім повернути вашу модель"
subgoal:
description: "Додати або керувати додатковими критеріями активної цілі"
status:
description: "Показати відомості про сеанс, модель, токени та контекст"
egress:
description: "Показати стан вихідного проксі Docker"
context:
description: "Показати детальний огляд контекстного вікна: індикатор використання, розбивка за категоріями, статистика стиснення та пропускна здатність"
whoami:
description: "Показати ваш рівень доступу до slash-команд (admin / user)"
profile:
description: "Показати назву активного профілю та домашній каталог"
sessions:
description: "Переглянути та відновити попередні сеанси"
config:
description: "Показати поточну конфігурацію"
model:
description: "Змінити модель (у межах сеансу; --global щоб зберегти)"
codex-runtime:
description: "Перемкнути середовище codex app-server для моделей OpenAI/Codex"
personality:
description: "Задати попередньо визначену особистість"
statusbar:
description: "Перемкнути рядок стану з контекстом і моделлю"
battery:
description: "Перемкнути кольоровий індикатор батареї в рядку стану"
timestamps:
description: "Перемкнути позначки часу [HH:MM] у повідомленнях і /history"
diff:
description: "Показати зміни git у робочому каталозі"
verbose:
description: "Перемикати показ прогресу інструментів: off -> new -> all -> verbose"
focus:
description: "Перемкнути режим фокусу — показувати лише ваш запит і фінальну відповідь"
footer:
description: "Перемкнути нижній колонтитул шлюзу з метаданими середовища у фінальних відповідях"
yolo:
description: "Перемкнути режим YOLO (пропускати всі схвалення небезпечних команд)"
approvals:
description: "Показати або задати постійний режим схвалення небезпечних команд"
reasoning:
description: "Керувати рівнем зусиль міркування та його показом"
fast:
description: "Швидкий режим — OpenAI Priority Processing / Anthropic Fast Mode (normal/fast/auto/cold/ultrafast)"
skin:
description: "Показати або змінити оформлення (тему) інтерфейсу"
indicator:
description: "Вибрати стиль індикатора зайнятості TUI"
voice:
description: "Перемкнути голосовий режим"
wake:
description: "Перемкнути слухач слова активації 'Hey Hermes'"
busy:
description: "Керувати поведінкою повідомлень, поки Hermes працює"
tools:
description: "Керувати інструментами: /tools [list|disable|enable] [name...]"
toolsets:
description: "Перелічити доступні набори інструментів"
skills:
description: "Шукати, встановлювати, переглядати або керувати навичками"
memory:
description: "Переглянути записи в пам'ять, що очікують / перемкнути шлюз схвалення"
bundles:
description: "Перелічити набори навичок (псевдоніми /<name> для кількох навичок)"
pet:
description: "Перемкнути або взяти улюбленця petdex (/pet, /pet list, /pet <slug>)"
hatch:
description: "Згенерувати нового улюбленця petdex за описом"
learn:
description: "Вивчити багаторазову навичку з будь-чого, що ви опишете (каталоги, URL, цей чат, нотатки)"
init:
description: "Згенерувати або оновити інструкції проєкту AGENTS.md за результатами сканування репозиторію"
cron:
description: "Керувати запланованими завданнями"
suggestions:
description: "Переглянути запропоновані автоматизації (прийняти або відхилити)"
blueprint:
description: "Налаштувати автоматизацію за шаблоном blueprint"
curator:
description: "Фонове обслуговування навичок (status, run, pin, archive, list-archived)"
kanban:
description: "Дошка спільної роботи для кількох профілів (завдання, зв'язки, коментарі)"
reload:
description: "Перезавантажити змінні .env у поточний сеанс"
reload-mcp:
description: "Перезавантажити MCP-сервери з конфігурації"
reload-skills:
description: "Пересканувати ~/.hermes/skills/ на нові встановлені чи видалені навички"
browser:
description: "Підключити браузерні інструменти до вашого браузера на базі Chromium через CDP"
plugins:
description: "Перелічити встановлені плагіни та їхній стан"
commands:
description: "Переглянути всі команди та навички (посторінково)"
help:
description: "Показати доступні команди (/help skills — команди навичок, /help <text> — фільтр)"
palette:
description: "Відкрити палітру команд із нечітким пошуком (також Ctrl+P)"
restart:
description: "Плавно перезапустити шлюз після завершення активних запусків"
usage:
description: "Показати використання токенів і обмеження швидкості; `reset` активує накопичене скидання ліміту Codex"
subscription:
description: "Переглянути ваш тариф Nous і змінити його в браузері"
login:
description: "Увійти з обліковим записом Nous (ваші конектори зберігаються)"
topup:
description: "Показати ваш баланс Nous і керувати оплатою на порталі"
platforms:
description: "Показати стан шлюзу та платформ обміну повідомленнями"
platform:
description: "Призупинити, відновити або перелічити несправну платформу шлюзу"
copy:
description: "Скопіювати останню відповідь асистента в буфер обміну"
paste:
description: "Прикріпити зображення з буфера обміну"
image:
description: "Прикріпити локальний файл зображення до наступного запиту"
version:
description: "Показати версію Hermes Agent"
debug:
description: "Завантажити звіт налагодження (відомості про систему + журнали) й отримати посилання для обміну"
quit:
description: "Вийти з CLI (--delete також видаляє історію сеансу)"
cli:
backtrack:
title: "↺ Відкат — виберіть попередній запит"
keys_hint: "↑/↓ вибір · Enter редагувати й надіслати знову · f відгалузитися звідси · Esc закрити"
preview_label: "Запит {number} з {total}:"
more_lines: "… (ще рядків: {count})"
editing_hint: "↺ Редагування запиту {number} — Enter відкочує сюди й надсилає · Esc Esc скасовує"
edit_cancelled: "↺ Відкат скасовано; нічого не видалено."
rewound: "↺ Відкочено до запиту {number} (повідомлень в архіві: {count}); надсилання зміненого запиту."
forked: "⑂ Відгалуження перед запитом {number}; початковий сеанс {parent} не змінено. Відредагуйте запит нижче й натисніть Enter, щоб надіслати."
nothing: "(._.) Немає попередніх запитів для відкату."
target_changed: "(x_x) Сеанс змінився відтоді, як ви вибрали запит {number}; нічого не видалено. Вашу правку повернуто в поле введення."
invalid: "(._.) Немає запиту {value} — виберіть від 1 до {total}."
usage: "Використання: /rewind [N | fork N]"
rewind_failed: "(x_x) Не вдалося виконати відкат; історію не змінено: {error}"
modern:
thought_for: "Міркував {seconds} с"
thought: "Міркував"
working: "Працюю…"
preparing: "Готую {what}…"
hint_steer: "спрямувати"
hint_queue: "у чергу"
hint_interrupt: "перервати"
hint_stop: "стоп"
hint_commands: "команди"
hint_files: "файли"
hint_shell: "shell"
placeholder_busy_steer: "пишіть, щоб спрямувати цей хід · Tab ставить у чергу на потім"
placeholder_busy_interrupt: "пишіть, щоб перенаправити цей хід · Tab ставить у чергу на потім"
placeholder_busy_queue: "пишіть, щоб поставити повідомлення в чергу після цього ходу"
billing:
load_failed: "{label}: {error}"
load_failed_label: "Не вдалося завантажити дані оплати"
not_logged_in: "Ви не ввійшли в Nous Portal."
run_portal_then: "Виконайте `hermes portal`, щоб увійти, а потім {cmd}."
org_line: "Організація: {org}"
org_line_role: "Організація: {org} · {role}"
bar_plan_label: "план"
bar_topup_label: "поповнення"
bar_pct_used: " · використано {pct}%"
bar_plan: "{label}[{bar}] залишилось ${remaining} з ${total}{pct}"
bar_topup: "{label}[{bar}] ${remaining} · без терміну дії"
total_spendable: "Усього доступно: ${amount}"
one_time_setup: "! Одноразове налаштування"
allow_remote_spending_title: "Дозволити Remote Spending"
allow_remote_spending_detail: "Відкриє браузер, щоб авторизувати цей термінал."
choice_allow_remote_spending: "Дозволити Remote Spending"
desc_allow_remote_spending: "відкрити браузер для авторизації"
choice_not_now: "Не зараз"
desc_not_now: "скасувати"
opening_browser_remote_spending: "Відкриваємо браузер, щоб дозволити Remote Spending…"
couldnt_allow_remote_spending: "Не вдалося дозволити Remote Spending: {error}"
remote_spending_allowed: "Remote Spending дозволено."
portal_line: "Портал: {url}"
open_this_url: "Відкрийте цю адресу: {url}"
manage_on_portal_url: "Керування на порталі: {url}"
no_manage_url: "Немає URL для керування — чи налаштовано ваш портал?"
stepup_stale: "Remote Spending для цього термінала все ще не активний — авторизація не спрацювала. Повторіть спробу або внесіть цю зміну на порталі."
something_went_wrong: "Щось пішло не так."
under_five: "менше $5"
plan_free: "Безкоштовний"
renews_suffix: " · поновлення {date}"
plan_line: "План: {plan}{renews}"
free_models_only_hint: "> Безкоштовний · лише безкоштовні моделі. Виконайте /subscription, щоб отримати доступ до платних моделей."
low_balance_usage: "! Низький баланс · залишилось {amount}. Виконайте /topup або /subscription."
usage_cta: "Виконайте /subscription, щоб змінити план · /topup, щоб поповнити баланс"
choice_cancel: "Скасувати"
choice_back: "Назад"
choice_go_back: "Повернутися"
choice_close: "Закрити"
desc_do_nothing: "нічого не робити"
desc_do_not_charge: "не списувати кошти"
choice_manage_on_portal: "Керувати на порталі"
desc_open_billing_page: "відкрити сторінку оплати в браузері"
topup_header: "Поповнення · баланс {balance}"
topup_title: "Поповніть баланс"
auto_reload_on_line: "Автопоповнення: увімкнено — нижче {threshold} → поповнити до {reload_to}"
auto_reload_off_line: "Автопоповнення: вимкнено"
card_line: "Картка: {card}"
no_saved_card_add_funds_hint: "Збереженої картки немає — «Додати кошти» допоможе її додати."
actions_require_admin: "Дії з оплатою може виконувати лише адміністратор або власник організації."
remote_spending_off_for_org: "Remote Spending вимкнено для цієї організації."
killswitch_reason_overview: "Адміністратор оплати може ввімкнути його на сторінці Hermes Agent порталу, щоб додавати кошти звідси."
killswitch_reason_buy: "Адміністратор оплати може ввімкнути його на сторінці Hermes Agent порталу перед додаванням коштів."
add_funds_now_hint: "Додати кошти зараз — одноразове списання, кошти зараховуються на баланс сьогодні."
refill_when_low_amounts: "Поповнювати за низького балансу — автоматично списує {reload_to}, коли баланс падає нижче {threshold}."
refill_when_low_generic: "Поповнювати за низького балансу — автоматично списує кошти з картки, коли баланс падає нижче встановленої вами суми."
choice_add_funds: "Додати кошти"
desc_add_funds: "одноразове списання, зараховується на баланс сьогодні"
choice_auto_reload: "Автопоповнення"
desc_auto_reload: "автоматично поповнювати, коли баланс закінчується"
choice_monthly_limit: "Місячний ліміт"
desc_monthly_limit: "показати місячну межу витрат (лише перегляд)"
# Keep going on credits (window plans only; the portal sends the setting only there)
keep_going_choice: "Продовжувати за кредити"
keep_going_desc: "використовувати кредити, коли включений обсяг закінчиться"
keep_going_on_line: "Продовжувати за кредити: увімкнено (використовувати кредити, коли включений обсяг закінчиться)"
keep_going_off_line: "Продовжувати за кредити: вимкнено (Hermes чекає на скидання)"
keep_going_confirm_title: "Продовжувати за кредити?"
keep_going_confirm_body: "Використовувати кредити, коли включений обсяг закінчиться. Вимкнено: Hermes чекає на скидання."
keep_going_turn_on: "Увімкнути"
keep_going_keep_off_desc: "залишити вимкненим: Hermes чекає на скидання"
keep_going_is_on_title: "«Продовжувати за кредити» увімкнено"
keep_going_turn_off: "Вимкнути"
keep_going_turn_off_desc: "Hermes чекає на скидання"
keep_going_leave_on: "Залишити увімкненим"
keep_going_turned_on: "✅ Продовжувати за кредити: увімкнено. Використовувати кредити, коли включений обсяг закінчиться."
keep_going_turned_off: "✅ Продовжувати за кредити: вимкнено. Hermes чекає на скидання."
cancelled: "Скасовано."
cancelled_yellow: "🟡 Скасовано."
cancelled_no_funds: "Скасовано. Кошти не додано."
no_portal_url: "URL порталу недоступний."
complete_in_browser: "Завершіть зміни оплати в браузері."
add_card_first: "Спочатку додайте картку"
add_card_title: "Додати картку"
no_saved_card: "Збереженої картки немає."
no_saved_card_short: "Збереженої картки немає"
no_saved_card_lower: "немає збереженої картки"
add_card_once_hint: "Додайте картку один раз на сторінці оплати порталу — після цього поповнювати баланс можна прямо з термінала."
add_card_then_recheck: "Додайте картку на сторінці оплати, а потім виберіть тут «перевірити ще раз»."
card_found_continuing: "Картку знайдено: {card} — продовжуємо."
still_no_card: "Картки все ще немає — завершіть її додавання на порталі, а потім перевірте ще раз."
choice_add_card_on_portal: "Додати картку на порталі"
desc_add_card_on_portal: "відкриває сторінку оплати в браузері"
choice_recheck_card: "Картку додано — перевірити ще раз"
desc_recheck_card: "перевірити картку ще раз і продовжити"
add_funds: "Додати кошти"
presets: "Варіанти: {presets}"
run_interactive_to_purchase: "Виконайте це в інтерактивному CLI, щоб завершити покупку."
desc_one_time_purchase: "одноразова покупка кредитів"
choice_custom_amount: "Інша сума…"
desc_custom_amount: "ввести власну суму"
payment_line: "Оплата: {card}"
amount_prompt: "Сума (USD):"
invalid_selection: "🔴 Неприпустимий вибір."
confirm_purchase: "Підтвердьте покупку"
total_line: "Разом: {amount}"
portal_card_will_be_charged: "Кошти буде списано з картки, збереженої на порталі."
consent_charge: "Підтверджуючи, ви дозволяєте Nous Research списати кошти з вашої картки."
choice_pay_now: "Сплатити {amount} зараз"
desc_submit_charge: "надіслати платіж"
desc_manage_card_billing: "керувати карткою / оплатою в браузері"
run_interactive_to_confirm: "Виконайте в інтерактивному CLI, щоб підтвердити покупку."
pay_question: "Сплатити {amount}?"
no_charge_id: "Ідентифікатор платежу не отримано; перевірте портал."
charge_submitted: "Платіж надіслано — підтверджуємо зарахування…"
could_not_check_charge: "🔴 Не вдалося перевірити платіж: {error}"
added_to_balance: "✓ {amount} зараховано на ваш баланс."
still_processing: "🟡 Обробка триває понад 5 хвилин — це тайм-аут, а не збій. Незабаром перевірте /billing або портал."
charge_failed_authentication_required: "🔴 Ваш банк вимагає підтвердження (3DS). Пройдіть його на порталі, щоб завершити покупку."
charge_failed_payment_method_expired: "🔴 Термін дії вашої картки минув. Оновіть її на порталі."
charge_failed_card_declined: "🔴 Вашу картку відхилено. Спробуйте іншу картку на порталі."
charge_failed_generic: "🔴 Платіж не пройшов ({reason})."
charge_error_no_payment_method: "💳 Картки немає — поповніть баланс і керуйте оплатою на порталі."
charge_error_remote_spending_disabled: "Remote Spending вимкнено для цього облікового запису — адміністратор оплати може ввімкнути його на сторінці Hermes Agent порталу."
charge_error_role_required: "Поповнювати рахунок може лише адміністратор або власник організації. Зверніться до адміністратора або скористайтеся порталом."
charge_error_idempotency_conflict: "🔴 Цей ключ платежу вже використано для іншої суми. Почніть нове поповнення."
revoked_by_admin: "Адміністратор зупинив витрати цього термінала."
revoked_by_you: "Ви зупинили витрати цього термінала."
revoked_reconnect: "🔴 {who} Підключіться знову, щоб відновити — виконайте `hermes portal` для повторної авторизації."
session_logged_out: "🔴 Ваш сеанс завершено. Виконайте `hermes portal`, щоб увійти знову."
monthly_cap_reached_headroom: "🔴 Досягнуто місячної межі витрат — залишилось ${remaining} запасу."
monthly_cap_reached: "🔴 Досягнуто місячної межі витрат."
try_again_in_min: " (спробуйте знову через ~{minutes} хв)"
too_many_charges: "🟡 Зараз надто багато платежів{mins}. Це не збій оплати."
remote_spending_needs_approval: "🔴 Remote Spending потребує схвалення — виконайте /topup, щоб дозволити, а потім повторіть."
your_topup: "ваше поповнення"
charge_stepup_explain: "Щоб списувати кошти з цього термінала, один раз дозвольте Remote Spending. У браузері відкриється сторінка авторизації, після чого {amount} продовжиться тут же."
charge_stepup_noninteractive: "Виконайте `hermes portal` і дозвольте Remote Spending, потім повторіть."
charge_stepup_declined: "Кошти не списано. Виконайте /topup, коли захочете дозволити Remote Spending."
charge_stepup_not_granted: "Не вдалося дозволити Remote Spending — це має схвалити адміністратор або власник організації. Кошти з вашої картки не списано."
allowed_but_org_off: "Remote Spending дозволено для цього термінала, але для цієї організації воно все ще вимкнене. Адміністратор оплати може увімкнути його на сторінці Hermes Agent у порталі, після чого виконайте /topup знову."
allowed_no_card: "Remote Spending дозволено — але картку ще не збережено."
topup_on_portal_to_continue: "Щоб продовжити, поповніть рахунок і керуйте оплатою на порталі."
allowed_run_topup: "Remote Spending дозволено. Виконайте /topup, щоб продовжити."
choice_resume_topup: "Відновити поповнення на {amount}"
desc_resume_topup: "завершити відкладену покупку"
resume_topup_title: "Відновіть своє поповнення"
resume_topup_detail: "{amount} готово до завершення — натисніть Enter, щоб продовжити."
resuming_topup: "Відновлюємо ваше поповнення — підтверджуємо розрахунок…"
auto_reload: "Автопоповнення"
auto_reload_hint: "Автоматично додавати кошти, коли баланс низький."
card_on_file: "Збережена картка: {card}"
no_saved_card_manage_portal: "Збереженої картки немає — керуйте оплатою на порталі."
auto_reload_rule: "нижче {threshold} → поповнити до {reload_to}"
auto_reload_rule_cap: "Нижче {threshold} → поповнити до {reload_to}"
currently: "Зараз: {rule}"
auto_reload_on_detail: "Увімкнено — {rule}"
run_interactive_to_configure: "Запустіть інтерактивний CLI, щоб налаштувати автопоповнення."
choice_edit_thresholds: "Змінити пороги"
desc_edit_thresholds: "змінити, коли і на скільки поповнювати"
choice_turn_off: "Вимкнути"
desc_turn_off: "вимкнути автопоповнення"
choice_agree_turn_on: "Погодитися й увімкнути"
desc_agree_turn_on: "увімкнути автопоповнення"
amount_prompt_labeled: "{label} (USD)"
threshold_label: "Коли баланс падає нижче"
reload_to_label: "Поповнити баланс до"
reload_must_exceed_threshold: "🔴 Сума поповнення має бути більшою за поріг."
auto_reload_consent: "Підтверджуючи, ви дозволяєте Nous Research списувати кошти з {card} щоразу, коли ваш баланс досягає {threshold}. Вимкнути можна будь-коли тут або на порталі."
turn_on_auto_reload_question: "Увімкнути автопоповнення?"
auto_reload_enabled: "✅ Автопоповнення увімкнено: нижче {threshold} → поповнити до {reload_to}."
auto_reload_disabled: "✅ Автопоповнення вимкнено."
monthly_spend_limit: "Місячний ліміт витрат"
no_monthly_cap: "Місячний ліміт не відображається (керується на порталі)."
default_ceiling_suffix: " (стандартна межа)"
used_this_month: "Використано {spent} з {limit} цього місяця{ceiling}"
monthly_limit_read_only: "Місячний ліміт встановлюється на порталі — у терміналі він лише для читання."
subscription:
load_failed_label: "Не вдалося завантажити підписку"
team_header: "Командна підписка"
a_team_org: "командна організація"
team_connected: "Цей термінал підключено до {org}. Команди працюють зі спільним балансом · щоб поповнити його, скористайтеся /topup."
personal_note: "Особисті підписки прив'язані до вашого особистого облікового запису."
your_plan: "ваш план"
cancels: "скасовується"
end_of_billing_period: "кінця розрахункового періоду"
end_of_cycle: "кінця циклу"
status_flip_cancels: " → скасовується"
status_flip_to: " → {tier}"
status_left: " · залишилося ${amount}"
status_view_only: " · лише перегляд"
status_renews: " · поновлюється {date}"
status_line: "План: {plan}{flip}{left}{tail}"
status_free: "План: Free · лише безкоштовні моделі"
scheduled_change: "Запланована зміна"
scheduled_change_line: "{from_plan} ──▶ {to_plan} {when}"
scheduled_when: "· {when}"
keep_until_then: "До того часу ви зберігаєте {plan} (і його кредити)."
paid_models_need_subscription: "> Для платних моделей потрібна підписка. Оформіть її, щоб отримати доступ."
low_balance: "! Низький баланс · залишилося {amount}. Поповніть або підвищте план, щоб робота не обірвалася посередині."
plan_changes_need_admin: "Змінювати план може лише адміністратор або власник організації."
manage_url_line: "Керування підпискою: {url}"
open_then_rerun: "Відкрийте посилання в браузері, а потім знову виконайте /subscription."
start_subscription: "Оформити підписку"
choose_plan: "Оберіть план"
start_opens_portal: "Оформлення підписки відкриє портал, де можна додати картку."
desc_start_on_portal: "оформити {name} на порталі"
pick_plan_detail: "Оберіть план, щоб відкрити його на порталі."
cancelled_no_plan_started: "🟡 Скасовано. План не оформлено."
opening_portal_to_start: "Відкриваю портал, щоб оформити {plan}…"
open_url_to_start: "Відкрийте цю URL-адресу, щоб оформити {plan}: {url}"
finish_in_browser: "Завершіть у браузері, а потім знову виконайте /subscription."
manage_your_subscription: "Керування підпискою"
desc_open_subscription_page: "відкрити сторінку підписки в браузері"
choice_copy_link: "Копіювати посилання"
desc_copy_link: "скопіювати URL-адресу керування підпискою в буфер обміну"
copied: "📋 Скопійовано: {url}"
manage_url: "URL керування: {url}"
choice_keep_plan: "Залишити {plan} (скасувати заплановану зміну)"
desc_keep_plan: "скасувати зміну, що очікує"
choice_change_plan: "Змінити план"
desc_change_plan: "підвищити або понизити план у терміналі"
choice_cancel_subscription: "Скасувати підписку"
desc_cancel_subscription: "запланувати скасування на кінець періоду"
closed_no_change: "🟡 Закрито. План не змінено."
no_other_plans: "Зараз немає інших планів, на які можна перейти."
direction_upgrade: "підвищення"
direction_downgrade: "пониження"
tier_row: "{row} · {direction}"
desc_switch_to: "перейти на {name}"
change_plan_title: "Зміна плану"
current_pick_detail: "Поточний: {plan}. Оберіть план, щоб переглянути наслідки."
cancelled_no_plan_change: "🟡 Скасовано. План не змінено."
checking_change: "Перевіряю зміну…"
the_selected_plan: "вибраний план"
already_on_nothing_to_change: "Ви вже на плані {plan} — змінювати нічого."
cannot_confirm_here: "Цю зміну не можна підтвердити тут — керуйте нею на порталі."
confirm_plan_change: "Підтвердьте зміну плану"
tag_charged_now: "· списання зараз"
tag_scheduled_not_today: "· заплановано · не сьогодні"
charged_amount_now: "{amount} зараз (пропорційно)"
charged_prorated_now: "пропорційну суму зараз"
upgrade_will_be_charged: "Підвищення до {plan}. З вас буде списано {charged}."
card_on_subscription_charged: "Кошти буде списано з картки, прив'язаної до вашої підписки."
named_card_on_subscription_charged: "Кошти буде списано з {card} — картки, прив'язаної до вашої підписки."
choice_pay_and_upgrade: "Сплатити {amount} і підвищити зараз"
choice_upgrade_now_prorated: "Підвищити зараз (пропорційне списання)"
desc_charge_and_upgrade: "списати кошти та підвищити зараз"
change_takes_effect: "Зміна на {plan} — набуде чинності {when}. Зараз нічого не списується; до того часу ви зберігаєте поточний план."
choice_schedule_change: "Запланувати зміну на {plan}"
desc_apply_change: "застосувати цю зміну"
desc_do_not_change: "не змінювати"
monthly_credits_change: "Зміна щомісячних кредитів: {delta}."
confirm_cancellation: "Підтвердьте скасування"
cancel_stays_active_until: "Скасувати {plan} — план залишиться активним до {end}, а потім не поновиться."
keep_remaining_credits: "Кредити, що залишилися на цей період, зберігаються за вами. Ви можете відновити підписку до його завершення."
cancel_subscription_question: "Скасувати підписку?"
desc_keep_your_plan: "залишити свій план"
cancelled_plan_unchanged: "🟡 Скасовано. Ваш план без змін."
your_new_plan: "ваш новий план"
upgrade_already_on_tier: "Ви вже на плані {name}."
upgrade_upgraded: "Підвищено до {name}. Нові щомісячні кредити з'являться за мить."
upgrade_requires_action: "🟡 Для цього підвищення потрібна додаткова перевірка (3DS). Завершіть її на порталі."
upgrade_payment_failed: "🔴 Вашу картку відхилено. Оновіть спосіб оплати на порталі та спробуйте ще раз."
pending_scheduled: "Заплановано — сьогодні ваш план не змінюється. Він діє до кінця розрахункового періоду, а потім перемикається."
pending_cancel_scheduled: "Заплановано — ваш план залишається активним до кінця розрахункового періоду, а потім скасовується. Сьогодні нічого не змінюється."
pending_resumed: "Скасовано — ви залишаєтеся на поточному плані."
rerun_to_review: "Щоб переглянути, будь-коли знову виконайте /subscription."
stepup_explain: "Щоб змінити план із термінала, одноразово дозвольте Remote Spending. Відкриється браузер для авторизації, після чого зміна продовжиться прямо тут."
stepup_noninteractive: "Виконайте `hermes portal` і дозвольте Remote Spending, а потім знову виконайте /subscription."
stepup_declined: "Змін не внесено. Дозвольте Remote Spending, коли будете готові."
stepup_not_granted: "Не вдалося дозволити Remote Spending — для цієї організації це має схвалити адміністратор або власник."
remote_spending_not_allowed_yet: "🟡 Remote Spending ще не дозволено. Дозвольте його, а потім повторіть."
upgrade_ambiguous: "🟡 Не вдалося підтвердити підвищення — кошти з вашої картки могли бути списані або ні."
rerun_to_check_plan: "Знову виконайте /subscription, щоб перевірити свій план, перш ніж повторювати спробу."
model:
switched: "✓ Модель змінено: {model}"
acting_model: "Діюча модель (оплачується за цей запуск): {model}"
reasoning_effort: "Рівень міркувань: {effort}"
reasoning_effort_saved: "Рівень міркувань: {effort} (збережено в конфігурації)"
saved: "Збережено в config.yaml"
saved_global: "Збережено в config.yaml (--global)"
next_turn_only: "(лише на наступний хід — повернеться після однієї відповіді)"
session_only: "(лише для цього сеансу — додайте --global, щоб зберегти)"
effort_none: "none (вимкнути міркування)"
effort_keep_current: "Залишити поточний рівень"
no_authenticated_providers: "Автентифікованих провайдерів не знайдено."
usage_switch: "змінити модель (цей сеанс)"
usage_switch_global: "змінити модель і зберегти як типову"
usage_switch_once: "змінити лише на наступний хід"
usage_switch_session: "змінити лише для цього сеансу"
usage_switch_provider_model: "змінити провайдера та модель"
usage_switch_reasoning: "змінити модель і задати рівень міркувань"
usage_switch_provider: "змінити провайдера"
usage_refresh: "повторно отримати актуальні списки моделей"
reset_none: "Уже використовується налаштована типова модель ({model}) — скидати нічого."
reset_no_default: "У config.yaml немає model.default — повертатися нема до чого."
choice_switch_anyway: "Усе одно змінити"
desc_switch_anyway: "Використати цю модель для поточного сеансу Hermes."
choice_cancel: "Скасувати"
desc_keep_current_model: "Залишити поточну модель."
confirm_choice_prompt: "Вибір [1/2]: "
switch_cancelled: "Зміну моделі скасовано."
selection_failed: "✗ Не вдалося вибрати модель: {error}"
switch_failed: "⚠ Не вдалося змінити модель на {model} ({error}); залишаємося на {old_model}."
cleared_picker_cache: "Кеш вибору моделей очищено. Оновлення..."
moa_one_shot_queued: "Одноразовий запуск MoA поставлено в чергу з пресетом {preset}; попередню модель буде відновлено після цього ходу."
normalized_model: "Назву моделі '{old}' нормалізовано до '{new}' для {provider}."
stripped_provider_prefix: "Префікс провайдера прибрано з '{old}'; для {provider} використовується '{new}'."
restored_from_session: "Модель відновлено із сеансу: {model}"
could_not_load_config: "❌ не вдалося завантажити конфігурацію: {error}"
tip_reset_new_session: "Порада: `/reset` одразу починає новий сеанс."
single_query:
query_label: "Запит:"
kanban_run_reclaimed: "kanban: запуск цього воркера було відкликано ще до початку; вихід"
shared:
cancel: "Скасувати"
back: "← Назад"
unknown: "невідомо"
unknown_error: "Невідома помилка"
noun_model: "модель"
label_enabled: "увімкнено"
label_disabled: "вимкнено"
label_yes: "так"
label_no: "ні"
label_on: "увімк"
label_off: "вимк"
label_on_upper: "УВІМК"
label_off_upper: "ВИМК"
label_value: "{label}: {value}"
just_now: "щойно"
ago_seconds: "{seconds} с тому"
ago_minutes: "{minutes} хв тому"
ago_hours: "{hours} год тому"
duration_s: "{seconds}с"
duration_m: "{minutes}хв"
duration_ms: "{minutes}хв {seconds}с"
duration_ms_compact: "{minutes}хв{seconds}с"
duration_hm: "{hours}год {minutes}хв"
duration_hms: "{hours}год {minutes}хв {seconds}с"
duration_dhm: "{days}д {hours}год {minutes}хв"
duration_m_rest: "{minutes}хв {rest}"
duration_hm_rest: "{hours}год {minutes}хв {rest}"
no_active_agent: "(._.) Немає активного агента -- спочатку надішліть повідомлення."
n_more: "ще {count}"
more_not_shown: "решту не показано"
yes_no_default_yes: "Y/n"
yes_no_default_no: "y/N"
yes_initial: "y"
tui:
approval_once: "Дозволити один раз"
approval_session: "Дозволити для цього сеансу"
approval_always: "Додати до постійного списку дозволених"
approval_deny: "Відхилити"
approval_view: "Показати команду повністю"
approval_title: "⚠️ Небезпечна команда"
approval_choose_full: "… (виберіть {label})"
approval_command_truncated: "… (команду скорочено — повний текст: /logs або /debug)"
approval_description_truncated: "… (опис скорочено)"
confirm_title: "Підтвердьте дію"
confirm_footer: "Введіть 1/2/3 або виберіть ↑/↓ і натисніть Enter. ESC/Ctrl+C — скасувати."
detail_truncated: "… (подробиці скорочено)"
clarify_title: "{agent_name} потребує вашої відповіді"
clarify_question_count_one: "{count} питання"
clarify_question_count_other: "{count} питань"
clarify_other_answer: "Інше: {text}"
clarify_other_type_below: "Інше (введіть нижче)"
clarify_other_type_answer: "Інше (введіть свою відповідь)"
clarify_guidance: "Введіть відповідь у полі нижче та натисніть Enter."
picker_title_provider: "⚙ Вибір моделі — виберіть провайдера"
picker_provider_row_one: "{name} ({count} модель)"
picker_provider_row_other: "{name} ({count} моделей)"
picker_current_marker: " ← поточна"
picker_current_hint: "Поточна: {model} на {provider}"
picker_title_effort: "⚙ Вибір моделі — рівень міркування для {model}"
picker_current_labeled: "{label} ← поточний"
picker_effort_hint: "Застосовується разом зі зміною моделі (та сама область) — Enter, щоб вибрати"
picker_title_models: "⚙ Вибір моделі — {provider}"
picker_provider_fallback: "Провайдер"
picker_filter_hint: "Фільтр: {query}▏ (збігів: {shown}/{total} — вводьте, щоб звузити, Backspace — очистити)"
picker_select_hint: "Виберіть модель (доступно: {count}) — вводьте текст для фільтрації"
picker_empty: "Для цього провайдера немає моделей. Виберіть «Назад» або «Скасувати»."
palette_title: "⚙ Палітра команд"
palette_filter_hint: "Фільтр: {query}▏ (збігів: {shown}/{total} — Enter вставляє, Esc скасовує)"
palette_hint: "Вводьте текст для фільтрації {total} команд — ↑/↓, потім Enter вставляє, Esc скасовує"
palette_empty: "(немає відповідних команд)"
vault_code_title: "🔐 Код підтвердження для {site}"
vault_code_body: "{site} запитує одноразовий код (SMS, електронна пошта або застосунок-автентифікатор).\nВведіть код і натисніть Enter; {agent_name} введе його на сторінці за вас.\nEnter у порожньому рядку пропускає. Модель ніколи не бачить код."
vault_save_title: "🔐 Зберегти логін для {site}"
vault_save_body: "Агент дійшов до сторінки входу, але для цього сайту немає збереженого логіна.\nВведіть email / ім'я користувача, з яким ви входите (видно під час введення), і натисніть Enter.\nEnter у порожньому рядку пропускає. Модель нічого з цього не бачить."
vault_save_pw_body: "Тепер пароль (приховано). Він шифрується на цьому комп'ютері, прив'язується до\n{origin} і вводиться на сторінці так, що модель його ніколи не бачить.\nEnter у порожньому рядку пропускає."
vault_unlock_title: "🔐 Розблокувати {backend}"
vault_unlock_body: "Агент хоче увійти на сайт з логіном, збереженим у {backend}.\nВведіть головний пароль (приховано), щоб розблокувати його на цей сеанс.\nEnter у порожньому рядку залишає заблокованим. Модель ніколи не бачить пароль."
sudo_title: "🔐 Потрібен пароль sudo"
sudo_body: "Введіть пароль нижче (приховано) або натисніть Enter, щоб пропустити"
secret_title: "🔑 Потрібне налаштування навички"
secret_prompt: "Введіть значення для {var_name}"
secret_fallback_name: "секрет"
secret_body: "Введіть секрет нижче (приховано), ESC або Ctrl+C — пропустити"
connection_connect: "Підключити"
connection_continue: "Продовжити"
hint_sudo: "пароль приховано · Enter — пропустити"
hint_secret: "секрет приховано · Enter — пропустити"
hint_approval: "↑/↓ — вибрати, Enter — підтвердити"
hint_slash_confirm: "введіть 1/2/3 або ↑/↓ — вибрати, Enter — підтвердити"
hint_connection_form: "введіть значення, Enter — наступне поле · ↑/↓ — перехід · ESC — скасувати"
hint_connection_url: "Enter — відкрити в браузері · ESC — скасувати"
hint_connection_authorized: "↑/↓ — вибрати, Enter — підтвердити"
hint_connection_waiting: "очікування бекенду… · Ctrl+C — перервати"
hint_connection_default: "налаштування підключення"
hint_vault_username: "видно під час введення · Enter — продовжити"
hint_clarify_freetext: "введіть відповідь і натисніть Enter"
hint_clarify_batch: "↑/↓ — вибрати, Enter — зафіксувати, Tab — наступне питання"
hint_input_disabled: "введення тимчасово вимкнено"
hint_input_queues: "введення активне; Enter додає в чергу"
hint_command_running: "{frame} команда виконується · {detail}"
placeholder_recording: "запис... {shortcut} — зупинити, Ctrl+C — скасувати"
placeholder_transcribing: "розпізнавання..."
placeholder_vault_username: "введіть email / ім'я користувача, Enter — продовжити · ESC — пропустити"
placeholder_vault_code: "введіть код, Enter — надіслати · ESC — пропустити"
placeholder_password: "введіть пароль (приховано), Enter — надіслати · ESC — пропустити"
placeholder_secret: "введіть секрет (приховано), Enter — надіслати · ESC — пропустити"
placeholder_choice: "введіть 1/2/3 або виберіть ↑/↓ і натисніть Enter"
placeholder_answer: "введіть відповідь тут і натисніть Enter"
placeholder_processing_command: "Обробка команди..."
placeholder_busy: "повідомлення=перервати · /queue · /bg · /steer · Ctrl+C — скасувати"
placeholder_voice_idle: "введіть текст або {shortcut} для запису"
voice_recording_failed: "Не вдалося записати голос: {error}"
recording_cancelled: "Запис скасовано."
force_exiting: "⚡ Примусовий вихід..."
interrupting_again_hint: "⚡ Переривання агента... (натисніть Ctrl+C ще раз для примусового виходу)"
interrupting: "⚡ Переривання агента..."
suspend_unsupported: "Призупинення (Ctrl+Z) не підтримується у Windows."
suspended: "{agent_name} призупинено. Виконайте `fg`, щоб повернути {agent_name}."
steer_failed_queued: "Не вдалося скерувати ({error}) — поставлено в чергу на наступний хід."
steered: "⏩ Скеровано: '{preview}'"
images_attached_preview_one: "[прикріплено {count} зображення]"
images_attached_preview_other: "[прикріплено зображень: {count}]"
queued_next_turn: "У черзі на наступний хід: {preview}"
redirected_turn: "↪ Поточний хід перенаправлено: '{preview}'"
model_selection_failed: "✗ Не вдалося вибрати модель: {error}"
auto_attached_image: "📎 Автоматично прикріплено зображення: {name}"
detected_file: "📄 Виявлено файл: {name}"
images_attached_one: "📎 Прикріплено {count} зображення"
images_attached_other: "📎 Прикріплено зображень: {count}"
command_interrupted: "Команду перервано."
welcome: "Вітаємо в Hermes Agent! Введіть повідомлення або /help для списку команд."
vscode_images_hint: "VS Code може показувати тут зображення в повній роздільній здатності: увімкніть terminal.integrated.enableImages у налаштуваннях."
activated_skills_label: "Активовані навички:"
redaction_disabled_title: "⚠ Приховування секретів ВИМКНЕНО"
redaction_disabled_body: "(HERMES_REDACT_SECRETS={value}). Ключі API та токени можуть з'являтися у відкритому вигляді у виводі чату, JSON сеансів і журналах. Задайте {setting} у config.yaml, щоб увімкнути знову."
stdin_unavailable: "Помилка: stdin (fd 0) недоступний.\nТаке буває з деякими інсталяціями Python (наприклад, cPython під керуванням uv на macOS).\nСпробуйте перевстановити Python через pyenv або Homebrew, потім знову виконайте: hermes setup"
shutting_down: "Завершення роботи… (закриття сеансу)"
session_deleted: "✓ Сеанс {session_id} видалено"
session_delete_missing: "✗ Сеанс {session_id} не знайдено для видалення"
voice:
err_termux_app_missing: "Виявлено пакет команд Termux:API, але Android-застосунок відсутній.\nВстановіть/оновіть Android-застосунок Termux:API, а потім повторіть /voice on."
err_mic_access: "Голосовому режиму потрібен доступ до мікрофона.\nВиконайте pkg install termux-api і встановіть Android-застосунок Termux:API, а потім повторіть /voice on."
err_audio_capture: "Голосовий режим потребує захоплення звуку."
err_stt_provider: "Голосовому режиму потрібен STT-провайдер для транскрипції.\nВиконайте hermes tools і налаштуйте Speech-to-Text, а потім перезапустіть Hermes."
silence_autostop: "Виявлено тишу, автоматична зупинка..."
hint_continuous: "автозупинка при тиші | {shortcut} — зупинити й вийти з безперервного режиму"
hint_termux: "Захоплення Termux:API | {shortcut} — зупинити"
hint_stop: "{shortcut} — зупинити"
recording: "● Запис..."
autorestart_failed: "Не вдалося автоматично перезапустити голосовий режим: {error}"
no_speech: "Мовлення не виявлено."
preparing_stt: "Підготовка локальної STT-моделі '{model}' (при першому використанні вона може завантажитися з Hugging Face)..."
transcribing: "Транскрибування..."
stop_phrase: "Виявлено фразу зупинки — завершення голосового чату."
transcription_failed: "Не вдалося транскрибувати: {error}"
processing_error: "Помилка обробки голосу: {error}"
recording_preserved: "Запис збережено в: {path}"
no_speech_stop: "Мовлення не виявлено 3 рази, безперервний режим зупинено."
tts_failed: "Не вдалося відтворити TTS: {error}"
interjection: "🎤 Голосова репліка — перериваю…"
echo_ignored: "Проігноровано ймовірне ехо TTS (не додано до черги)."
already_enabled: "Голосовий режим уже увімкнено."
unavailable_header: "Голосовий режим недоступний у цьому середовищі:"
requirements_header: "Вимоги голосового режиму не виконано:"
termux_install_cmd: "Виконайте: pkg install termux-api"
termux_install_hint: "Потім встановіть/оновіть Android-застосунок Termux:API для захоплення з мікрофона"
tts_enabled_suffix: " (TTS увімкнено)"
enabled: "Голосовий режим увімкнено{tts_status}"
record_key_hint: "{shortcut} — почати/зупинити запис"
tts_toggle_hint: "/voice tts — перемкнути озвучування відповідей"
disable_hint: "/voice off — вимкнути голосовий режим"
stop_phrase_typed: "Введено фразу зупинки — завершення голосового чату."
disabled: "Голосовий режим вимкнено."
wake_unavailable: "Слово активації недоступне: {error}"
wake_already: "Прослуховування слова активації вже триває."
wake_requirements_header: "Вимоги для слова активації не виконано:"
wake_installing: "Встановлення рушія слова активації (перше використання — це може зайняти хвилину)..."
wake_start_failed: "Не вдалося запустити слово активації: {error}"
wake_listening: "Слово активації прослуховується"
wake_listening_hint: "(скажіть \"{phrase}\" — /wake off, щоб зупинити)"
wake_stopped: "Слово активації зупинено."
wake_not_running: "Слово активації не запущено."
wake_profile_hint: "Фраза активації для профілю '{profile}' — виконайте: hermes -p {profile}"
wake_detected: "✦ Виявлено слово активації — слухаю..."
wake_capture_failed: "Не вдалося захопити звук після активації: {error}"
state_listening: "СЛУХАЄ"
state_paused: "ПРИЗУПИНЕНО"
state_off: "ВИМК"
state_on: "УВІМК"
state_yes: "ТАК"
wake_status_title: "Стан слова активації"
label_state: " Стан: {state}"
label_phrase: " Фраза: \"{phrase}\""
label_provider: " Провайдер: {provider}"
label_surface: " Інтерфейс: {surface}"
label_new_session: " Новий сеанс: {value}"
mic_silent_warning: "⚠ Мікрофон передає лише тишу — слухач нічого не чує."
mic_silent_macos_hint: "На macOS: System Settings > Privacy & Security > Microphone — дозвольте доступ вашому терміналу/Hermes, а потім виконайте /wake off + /wake on."
wake_enable_hint: "Увімкнути: /wake on"
enable_first_hint: "Спочатку увімкніть голосовий режим: /voice on"
tts_no_provider: "Попередження: немає доступного TTS-провайдера. Встановіть edge-tts або задайте API-ключі."
tts_status: "Голосовий TTS {status}."
status_title: "Стан голосового режиму"
label_mode: " Режим: {value}"
label_tts: " Озвучення (TTS): {value}"
label_recording: " Запис: {value}"
label_record_key: " Клавіша запису: {shortcut}"
label_requirements: "Вимоги:"
render:
response_transformed: "[Відповідь перетворено після потокового виведення]"
banner_tagline: "{name} - фреймворк AI-агентів"
banner_version: "Hermes Agent, версія {version} ({date})"
subagents:
cannot_steer_process: "Фонові процеси не можна скерувати; зупиніть їх або прочитайте журнал."
count_live: "{count} активних"
count_done: "{count} завершено"
count_running: "{count} виконується"
count_procs_one: "{count} процес"
count_procs_other: "{count} процесів"
count_queued: "{count} у черзі"
goal_parked: "ціль відкладено"
goal_paused: "ціль призупинено"
goal_active: "ціль активна"
title_live_work: "Поточна робота"
title_subagents: "Субагенти"
title_processes: "Процеси"
last_tool: "останній: {tool}"
starting: "запускається"
next_queued: "далі: {text}"
heading_full: "{title} · {count} · Ctrl+T розгорнути · Ctrl+R відновити"
heading_medium: "{count} · Ctrl+T розгорнути · Ctrl+R відновити"
heading_compact: "{count} · Ctrl+T · Ctrl+R"
heading_session_restore: "{count} · Ctrl+R відновити"
heading_session_compact: "{count} · Ctrl+R"
subagents_heading: "Субагенти · {count} активних · Ctrl+T розгорнути · Ctrl+R згорнути"
more_subagents: "+{count} ще · Ctrl+T усі субагенти"
controls_expand_collapse: " · Ctrl+T розгорнути · Ctrl+R згорнути"
processes_heading: "Процеси · {summary}{controls}"
more_processes: "+{count} ще · Ctrl+T усі процеси"
controls_collapse: " · Ctrl+R згорнути"
queue_heading: "Черга · {count} у черзі · /queue list{controls}"
more_queued: "+{count} ще"
transcript_unavailable: "Транскрипт у реальному часі ще недоступний."
control_pending: "Надсилання…"
steer_prompt: "Скерувати: "
roster_empty: "Немає активних субагентів чи фонових процесів. Результати з'являться в розмові."
entry_gone: "Цей запис більше не активний."
noun_process: "процес"
noun_subagent: "субагент"
footer_confirm_stop: "Зупинити вибраний {noun}? y підтвердити · Esc скасувати"
footer_confirm_stop_compact: "Зупинити? y так · Esc скасувати"
footer_steering: "Enter додає вказівку до черги · Esc скасовує (не перериває)"
footer_steering_compact: "Enter надіслати · Esc скасувати"
footer_steer_key: " s скерувати"
footer_steer_key_long: " · s скерувати"
footer_detail_compact: "PgUp/Dn ·{steer} x зупинити · Esc"
footer_roster_compact: "↑↓ · Enter стежити · Ctrl+T закрити"
footer_detail: "Esc список · PgUp/PgDn стежити{steer} · x зупинити"
footer_roster: "↑/↓ вибрати · Enter стежити{steer} · x зупинити · q/Ctrl+T закрити"
dock:
process_goal_label: "фоновий процес"
last_output: "останнє: {detail}"
starting: "запускається"
exit_code: "код виходу {code}"
verdict_killed: "зупинено"
verdict_lost: "втрачено"
verdict_ago: "{verdict} · {seconds} с тому"
process_gone: "Цей процес більше не відстежується."
no_output: "Виводу ще немає."
approval:
bell_context: "схвалення"
label: "Схвалення"
timeout_denying: "⏱ Час вийшов — команду відхилено"
timed_out_no_response: "час вийшов (без відповіді)"
outcome_once: "дозволено один раз"
outcome_session: "дозволено для сеансу"
outcome_always: "додано до списку дозволених"
outcome_deny: "відхилено"
clarify:
bell_context: "уточнення"
label: "Уточнення"
timed_out_locked_answers: "(час на уточнення вийшов через {timeout} с — повернено зафіксовані відповіді)"
connect:
bell_context: "налаштування підключення"
cannot_restart: "Це підключення не можна запустити повторно. Скасуйте й попросіть агента ще раз."
secret_set: "Задано"
set_up: "Налаштувати {name}"
button_connect: "Підключити"
button_cancel: "Скасувати"
button_continue: "Продовжити"
press_enter_open: "Натисніть Enter, щоб відкрити в браузері"
failed: "Не вдалося підключитися"
authorized_no_tools: "Авторизовано. Інструменти недоступні."
connected: "Підключено"
named_account: "Hermes назвав цей обліковий запис {name} «{alias}». Його можна перейменувати будь-коли."
waiting: "Очікування…"
editor:
only_interactive: "Зовнішній редактор доступний лише в інтерактивному CLI."
wait_for_command: "Дочекайтеся завершення поточної команди, перш ніж відкривати редактор."
finish_active_prompt: "Завершіть активний запит, перш ніж відкривати редактор."
no_input_buffer: "Немає активного буфера введення для зовнішнього редактора."
open_failed: "Не вдалося відкрити зовнішній редактор: {error}"
shell_command_failed: "Команда оболонки завершилася з помилкою: {error}"
command_failed: "Команда завершилася з помилкою: {error}"
queued_next_turn: "Поставлено в чергу на наступний хід: {preview}"
modal:
cancelled_no_input: "🟡 /{command} скасовано (немає введення)."
unrecognized_choice: "🟡 Нерозпізнаний вибір '{raw}'. /{command} скасовано."
cancelled: "🟡 /{command} скасовано. {unchanged}"
re_enable_hint: " Увімкнути знову можна через `approvals.{setting}: true` у config.yaml."
persist_opt_out_failed: "⚠️ Не вдалося зберегти відмову — {once_verb} один раз."
persist_failed_proceeding: "⚠️ Не вдалося зберегти відмову — продовжуємо один раз."
choice_prompt: "Вибір [1/2/3]: "
destructive_title: "⚠️ /{command} — знищує стан розмови"
approve_once: "Схвалити один раз"
approve_once_detail: "продовжити лише цього разу"
always_approve: "Завжди схвалювати"
always_approve_detail: "продовжити й назавжди приховати цей запит"
cancel: "Скасувати"
cancel_detail: "зберегти поточну розмову"
conversation_unchanged: "Розмова без змін."
destructive_always_msg: "🔒 Надалі /clear, /new, /reset і /undo виконуватимуться без підтвердження."
bell_input_needed: "потрібне введення"
bell_turn_complete: "хід завершено"
palette:
category_skill: "Навичка"
secret:
bell_sudo: "пароль sudo"
sudo_timeout: "⏱ Час вийшов — продовжуємо без sudo"
sudo_received: "✓ Пароль отримано (кешовано на сеанс)"
sudo_skipped: "⏭ Пропущено"
bell_unlock: "розблокувати {name}"
stays_locked: "⏭ {name} залишається заблокованим"
unlocking_for_session: "✓ Розблоковуємо {name} на цей сеанс"
bell_save_login: "зберегти логін для {site}"
login_not_saved: "⏭ Логін для {site} не збережено"
login_saved: "✓ Логін для {site} збережено у вашому сховищі"
bell_verification_code: "код підтвердження для {site}"
code_not_entered: "⏭ Код для {site} не введено"
code_entered: "✓ Код введено на {site}"
display:
ui_redrawn: "✓ Інтерфейс перемальовано"
status_bar_visible: "Рядок стану показано"
status_bar_hidden: "Рядок стану приховано"
exit:
unknown_argument: "✗ Невідомий аргумент: {argument}. Використайте /exit --delete, щоб також видалити історію сеансу."
goal:
barrier_lifted: "▶ Бар'єр цілі знято — відновлюємо роботу."
paused_interrupted: "⏸ Ціль призупинено — хід було перервано. Використайте /goal resume, щоб продовжити, або /goal clear, щоб зупинити."
loop:
wakeup_firing: "↻ Спрацьовує пробудження /loop №{tick}…"
paused_interrupted: "⏸ Цикл призупинено — хід пробудження було перервано. Використайте /loop resume, щоб продовжити, або /loop stop, щоб завершити."
remaining: "↻ Цикл: {label}."
plugins:
none_installed: "Плагіни користувача не встановлено."
install_hint: "Встановити: hermes plugins install owner/repo"
drop_dir_hint: "Або покладіть каталог плагіна в {path}"
bundled_available: "(доступно вбудованих плагінів: {count} — див.: hermes plugins list)"
user_plugins_header: "Плагіни користувача ({count}):"
count_noun_tools: "інструментів"
count_noun_hooks: "хуків"
count_noun_commands: "команд"
bundled_more: "(+{count} вбудованих — див.: hermes plugins list)"
enable_disable_hint: "Увімкнути/вимкнути: hermes plugins enable/disable <name>"
system_error: "Помилка системи плагінів: {error}"
queue:
usage: "Використання: /queue <prompt> | /queue list | /queue edit N <prompt> | /queue rm N | /queue move FROM TO | /queue clear"
queued: "У черзі: {preview}"
queued_next_turn: "Поставлено в чергу на наступний хід: {preview}"
empty: "Черга порожня."
pending_header: "Черга (в очікуванні: {count}):"
cleared_one: "Очищено {count} запит із черги."
cleared_other: "Очищено {count} запитів із черги."
removed: "Видалено елемент черги {index}: {preview}"
item_not_found: "Елемент черги {index} не знайдено. Поточний розмір: {size}"
usage_edit: "Використання: /queue edit <number> <new prompt>"
usage_remove: "Використання: /queue rm <number>"
updated: "Оновлено елемент черги {index}: {preview}"
usage_move: "Використання: /queue move <from> <to>"
move_out_of_range: "Переміщення в черзі поза межами діапазону. Поточний розмір: {size}"
moved: "Елемент черги {source} переміщено на {destination}."
usage_add: "Використання: /queue add <prompt>"
gateway_refused: "Шлюз не поставив це в чергу: {error}. Нічого не поставлено; надішліть знову, коли хід закінчиться."
submit_unknown: "Шлюз не відповів ({error}), тож запит, можливо, уже в черзі. Перевірте /queue list, перш ніж надсилати знову."
move_gateway_fifo: "Шлюз виконує запити в черзі в порядку надсилання; натомість відредагуйте або видаліть один."
remove_refused: "Не вдалося видалити елемент черги {index}: {error}"
edit_refused: "Не вдалося змінити елемент черги {index}: {error}"
already_started: "Елемент черги {index} уже запущено; він виконується в надісланому вигляді."
started_stopped: "Елемент черги {index} уже було запущено; шлюз зупинив його."
change_unknown: "Шлюз не відповів щодо елемента черги {index} ({error}); перевірте /queue list, перш ніж пробувати знову."
reload:
env_reloaded: "Перезавантажено .env (оновлено змінних: {count})"
steer:
usage: "Використання: /steer <prompt>"
failed: "Не вдалося скерувати: {error}"
queued: "⏩ Скерування в черзі — надійде після наступного виклику інструмента: {preview}"
rejected_empty: "Скерування відхилено (порожній вміст)."
no_agent_queued: "Агент не запущений; поставлено в чергу як наступний хід: {preview}"
title:
session_id: "ID сеансу: {session_id}"
current: "Назва: {title}"
pending: "Назва (очікує): {title}"
none_set_usage: "Назву не встановлено. Використання: /title <назва вашого сеансу>"
usage: "Використання: /title <назва вашого сеансу>"
empty_after_cleanup: "Після очищення назва порожня. Використовуйте друковані символи."
set: "Назву сеансу встановлено: {title}"
already_in_use: "Назву '{title}' уже використовує сеанс {session_id}"
queued: "Назву сеансу поставлено в чергу: {title} (буде збережено з першим повідомленням)"
undo:
invalid_count: "(._.) Недійсне число {value} — використовуйте /undo або /undo N."
removes_last_exchange: "Це видаляє з історії останній обмін репліками (ваше повідомлення та відповідь асистента)."
removes_last_turns: "Це видаляє з історії останні {count} ходів користувача."
resume:
tool_calls_one: "[{count} виклик інструмента: {names}]"
tool_calls_other: "[{count} викликів інструментів: {names}]"
event_model_changed: "модель змінено"
event_delegation_completed: "фонове делегування завершено"
event_process_finished: "фоновий процес завершено"
event_resumed_interrupted: "перерваний хід відновлено"
session_id_hint: "Використайте ID сеансу з попереднього запуску CLI (hermes sessions list)."
session_not_found: "Сеанс не знайдено: {session_id}"
compressed_into: "Сеанс {session_id} було стиснуто в {descendant}; відновлюємо нащадок із вашою стенограмою."
cannot_resume: "Не вдалося відновити сеанс: {error}"
kanban_owned: "⛔ Сесія {session_id} — це стенограма Kanban-воркера. Її відновлення тут створило б пишучого, якого Kanban-дошка не може спостерігати чи контролювати — замість цього повторіть спробу або розблокуйте картку на дошці, щоб dispatcher володів наступним запуском."
cannot_resume_prefix: "Не вдалося відновити сеанс:"
resumed_session: "↻ Сеанс відновлено"
counts_one: "({count} повідомлення користувача, усього повідомлень: {total})"
counts_other: "({count} повідомлень користувача, усього повідомлень: {total})"
session_no_messages: "Сеанс {session_id} знайдено, але в ньому немає повідомлень. Починаємо з чистого аркуша."
title_applied: "Назву сеансу застосовано: {title}"
title_apply_failed: "Не вдалося застосувати відкладену назву: {error}"
label_you: "● Ви:"
label_assistant: "◆ {agent_name}:"
earlier_messages: "... ще {count} попередніх повідомлень ..."
panel_title: "Попередня розмова"
startup:
cooldown_cause_rate_limit: "після відповіді про ліміт запитів або квоту"
cooldown_cause_token_refresh: "після невдалого оновлення токена"
cooldown_cause_http: "після відповіді HTTP {code}"
cooldown_cause_failed_request: "після невдалого запиту"
credential_cooling_down: "Облікові дані {provider} тимчасово виведено з ротації {cause}; вони повернуться приблизно через {minutes} хв."
sign_in_lost: "вхід втрачено"
sign_in_was_lost: "Вхід у {provider} втрачено ({reason}); виконайте `hermes auth add {provider}`, щоб увійти знову."
provider_resolution_failed: "Не вдалося визначити провайдера."
no_api_key_for_provider: "⚠️ Не знайдено ключ API для провайдера '{provider}'."
no_provider_configured: "⚠️ Провайдера інференсу не налаштовано."
run_model_or_setup: "Виконайте 'hermes model', щоб вибрати провайдера, або 'hermes setup' для першого налаштування."
empty_base_url: "⚠️ Резолвер провайдера повернув порожній базовий URL. Перевірте конфігурацію провайдера або виконайте: hermes setup"
switching_to_fallback: "⚠️ {reason} — перемикаємося на резервний варіант: {provider} / {model}"
first_run_no_provider: "☤ Провайдера інференсу ще не налаштовано — давайте це виправимо."
first_run_pick_provider: "Ви виберете провайдера (Nous Portal OAuth — найшвидший варіант; ключ API не потрібен) і модель."
first_run_prompt: "Налаштувати провайдера зараз? [Y/n]:"
first_run_skipped: "Пропущено. Виконайте 'hermes model' або 'hermes setup' будь-коли."
first_run_cancelled: "Налаштування скасовано. Виконайте 'hermes model' будь-коли."
provider_setup_failed: "⚠️ Не вдалося налаштувати провайдера: {error}"
run_model_to_retry: "Виконайте 'hermes model', щоб спробувати ще раз."
provider_configured: "✓ Провайдера налаштовано — можна починати спілкування."
provider_setup_incomplete: "Налаштування провайдера не завершено. Виконайте 'hermes model', щоб повторити."
unknown_toolsets: "Попередження: невідомі набори інструментів: {names}"
stdin_unusable: "\nПомилка: stdin непридатний для використання ({error}).\nТаке трапляється з деякими інсталяціями Python (напр. cPython від uv на macOS),\nде kqueue не може зареєструвати fd 0.\nСпробуйте перевстановити Python через pyenv або Homebrew, а потім виконайте знову: hermes setup"
warning: "Попередження: {warning}"
chat:
initializing_agent: "Ініціалізація агента..."
context_refs: "[@ контекст: {count} посил., {tokens} токенів]"
context_injection_refused: "Вставлення контексту відхилено."
skipped_unreadable_images: "⚠ пропущено {count} нечитабельних шляхів до зображень"
attaching_images_natively: "📎 додаємо {count} зображень нативно (модель підтримує зір): {names}"
new_message_interrupting: "⚡ Виявлено нове повідомлення, перериваємо..."
unknown_error: "Невідома помилка"
continuous_voice_stopped: "Безперервний голосовий режим зупинено через помилку."
interrupted_marker: "── [Перервано — обробка нового повідомлення] ──"
iteration_budget_reached: "⚠ Вичерпано бюджет ітерацій ({used}/{max}) — відповідь може бути неповною"
sending_after_interrupt_multi: "⚡ Надсилаємо {count} повідомлень після переривання: '{preview}'"
sending_after_interrupt: "⚡ Надсилаємо після переривання: '{preview}'"
delivering_leftover_steer: "⏩ Передаємо залишок /steer як наступний хід: '{preview}'"
reasoning_label: "Міркування"
reasoning_more_lines: "... (ще {count} рядків — /reasoning full, щоб показати)"
billing_cta_nous: "Виконайте [bold]/topup[/], щоб додати кредити, або [bold]/subscription[/], щоб змінити план."
billing_cta_provider: "Додайте кредити через {provider}"
your_provider: "вашого провайдера"
billing_cta_switch: "Або змініть провайдера через [bold]/model <model> --provider <provider>[/]."
out_of_credits_title: "⚡ Кредити вичерпано"
session:
fresh_start: "✨ (◕‿◕)✨ Новий початок! Екран очищено, розмову скинуто."
model_reset_default: "(модель скинуто до типової з конфігурації: {model})"
title_rejected: "Назву відхилено: {error}"
title_empty_untitled: "Після очищення назва порожня — сеанс запущено без назви."
title_error_untitled: "{error} — сеанс запущено без назви."
cwd_gone: "⚠ Робочий каталог сеансу більше не існує: {recorded} — залишаємося в {current}"
cwd_restored: "↻ Робочий каталог: {path}"
cwd_enter_failed: "⚠ Не вдалося перейти до робочого каталогу сеансу {path}: {error}"
yolo_restored: "⚡ Режим YOLO відновлено із сеансу — усі команди схвалюються автоматично. /yolo, щоб вимкнути."
invalid_checkpoint: "Недійсний номер контрольної точки. Використовуйте 1-{count}."
status_tools_deferred: "інструменти відкладено"
status_tools_count: "{count} інструментів"
status_toolsets: "набори інструментів: {toolsets}"
status_provider: "провайдер: {provider}"
status_auth: "автентифікація: {source}"
reasoning_display_suffix: " (показ: {state})"
yolo_bypass_suffix: " (обхід YOLO активний)"
ctx_left_prefix: "залишилося {percent}% · "
ctx_tokens_used: "{left}{used} / {max} токенів використано"
status_title: "Стан Hermes CLI"
label_reasoning: "Міркування"
label_approvals: "Схвалення"
label_context: "Контекст"
recent_intro: "(._.) У поточному чаті ще немає повідомлень — ось недавні сеанси, які можна відновити:"
recent_header: "Недавні сеанси:"
column_title: "Назва"
column_preview: "Уривок"
column_last_active: "Остання активність"
column_id: "ID"
resume_usage: "Щоб продовжити, використайте /resume <номер>, /resume <id сеансу> або /resume <назва сеансу>."
resume_example: "Приклад: /resume 2"
history_empty: "(._.) Історії розмови ще немає."
history_tools_header: "[Інструменти]"
history_tools_hidden_one: "(приховано {count} повідомлення інструмента)"
history_tools_hidden_other: "(приховано {count} повідомлень інструментів)"
history_title: "(^_^) Історія розмови"
history_you_header: "[Ви №{index}]"
history_assistant_header: "[{agent_name} №{index}]"
history_no_text: "(без текстової відповіді)"
history_tool_calls_one: "(запитано {count} виклик інструмента)"
history_tool_calls_other: "(запитано {count} викликів інструментів)"
new_session_titled: "(^_^)v Новий сеанс запущено: {title}"
new_session: "(^_^)v Новий сеанс запущено!"
resume_index_out_of_range: "Індекс відновлення {index} поза межами діапазону."
resume_no_args_hint: "Використайте /resume без аргументів, щоб побачити доступні сеанси."
save_nothing: "(;_;) Немає розмови для збереження."
save_dir_failed: "(x_x) Не вдалося створити каталог для збереження {path}: {error}"
format_markdown: "Markdown"
save_ok: "(^_^)v Розмову збережено в: {path} ({label})"
save_resume_hint: "Відновити активний сеанс: hermes --resume {session_id}"
save_failed: "(x_x) Не вдалося зберегти: {error}"
retry_no_messages: "(._.) Немає повідомлень для повторення."
retry_no_user_message: "(._.) Не знайдено повідомлення користувача для повторення."
retry_unsafe: "(._.) Неможливо безпечно повторити це повідомлення: {error}"
retry_rewind_failed: "(x_x) Не вдалося відкотити для повторення; історію не змінено: {error}"
retrying: "(^_^)b Повторюю: \"{preview}\""
undo_no_messages: "(._.) Немає повідомлень для скасування."
undo_no_user_message: "(._.) Не знайдено повідомлення користувача для скасування."
undo_failed: "(x_x) Не вдалося скасувати; історію не змінено: {error}"
undo_ok_one: "(^_^)b Скасовано {count} хід (повідомлень: {messages}). Резервна копія: \"{backup}\""
undo_ok_other: "(^_^)b Скасовано {count} ходів (повідомлень: {messages}). Резервна копія: \"{backup}\""
undo_remaining: "В історії залишилося повідомлень: {count}."
yolo_state_locked_on: "заблоковано УВІМК"
yolo_locked: "⚡ YOLO {state} для цього процесу (запущено з --yolo / HERMES_YOLO_MODE). /yolo не може його вимкнути — перезапустіть без прапорця, щоб знову ввімкнути схвалення."
yolo_off: "⚠ Режим YOLO {state} — небезпечні команди потребуватимуть схвалення."
yolo_on: "⚡ Режим YOLO {state} — усі команди схвалюються автоматично. Використовуйте з обережністю."
compress_too_short: "(._.) Недостатньо розмови для стиснення (потрібно щонайменше {min} повідомлень)."
compress_no_agent: "(._.) Немає активного агента — спочатку надішліть повідомлення."
compress_busy: "Стиснення контексту..."
compress_summarizing: "🗜️ Підсумовую до цього місця: {count} повідомлень, останні {keep_last} обмін(ів) зберігаю дослівно..."
compress_focus: "🗜️ Стискаю {count} повідомлень, фокус: \"{focus}\"..."
compress_plain: "🗜️ Стискаю {count} повідомлень..."
compress_failed: "❌ Стиснення не вдалося: {error}"
persist_prompt_summary: "{icon} {label}: {detail} → {outcome}"
goodbye: "До побачення! ☤"
exit_resume_hint: "Відновити цей сеанс:"
exit_label_session: "Сеанс: {session_id}"
exit_label_title: "Назва: {title}"
exit_label_duration: "Тривалість: {duration}"
exit_label_messages: "Повідомлень: {count} ({user} від користувача, {tool_calls} викликів інструментів)"
status_bar:
vim_insert: "ВСТАВКА"
vim_replace: "ЗАМІНА"
vim_normal: "ЗВИЧАЙНИЙ"
battery_none: "на цьому комп'ютері не виявлено батареї"
battery_none_nothing_shown: "батареї не виявлено, тому тут нічого не показуватиметься"
battery_currently: " — зараз {reading}"
battery_state: "Індикатор батареї {state}{detail}"
battery_usage: "Використання: /battery [on|off|status]"
battery_on: "Індикатор батареї увімкнено{detail}"
battery_off: "Індикатор батареї вимкнено"
latency_label: "{value} с"
velocity_label: "{value} т/с"
voice_rec: "● ЗАПИС"
voice_rec_stop_hint: "● ЗАПИС {shortcut} — зупинити"
voice_stt: "◉ STT"
voice_transcribing: "◉ Транскрибування..."
voice_tts_on: " | TTS увімк"
voice_continuous: " | Безперервний"
voice_mode_hint: "🎤 Голосовий режим{tts}{cont} — {shortcut} для запису"
goal_turns: "⊙ ціль {used}/{max}"
goal: "⊙ ціль"
ctx_pinned: " закріплено"
ctx_fallback: " за замовчуванням"
ctx_unknown: "ctx --"
yolo_badge: "⚠ YOLO"
stash_header_one: "📌 Схованка ({count} елемент)"
stash_header_other: "📌 Схованка ({count} елементів)"
stash_footer: "↑↓ Enter=відновити D=видалити Esc"
stash_footer_compact: "↑↓ ⏎ D Esc"
stream:
busy_skills_search: "Пошук навичок..."
busy_skills_browse: "Завантаження навичок..."
busy_skills_inspect: "Перегляд навички..."
busy_skills_install: "Встановлення навички..."
busy_skills: "Обробка команди навичок..."
busy_browser: "Налаштування браузера..."
busy_reload_mcp: "Перезавантаження MCP-серверів..."
busy_reload_skills: "Перезавантаження навичок..."
processing_command: "Обробка команди..."
thinking_label: "[роздуми]"
thinking_more_lines: "... (ще {count} рядків)"
preview_more_lines_one: "... (+{count} рядок)"
preview_more_lines_other: "... (+{count} рядків)"
vision_analyzing: "👁️ аналіз {name} ({size_kb} КБ)..."
vision_analyzed: "✓ зображення проаналізовано"
vision_failed: "⚠ аналіз зображення не вдався — шлях додано для повторної спроби"
vision_error: "⚠ помилка аналізу зображення — шлях додано для повторної спроби"
tool_preparing: "{emoji} підготовка: {what}…"
reference_noun: "довідка"
reference_header_indexed: "Довідка {index}/{count} — {label}"
reference_header: "Довідка — {label}"
aggregating_detail: "◆ зведення ({detail})"
aggregating: "◆ зведення"
background_running_one: "↩ Фонове завдання виконується — я продовжу, щойно воно завершиться. Можете писати далі."
background_running_other: "↩ Виконується фонових завдань: {count} — я продовжу, щойно вони завершаться. Можете писати далі."
terminal:
recovered_mouse_modes: "Режими введення термінала відновлено після витоку звітів миші. Якщо це повториться, виконайте /new або перезапустіть цю вкладку."
recovered_cooked_mode: "Термінал відновлено після збою cooked-режиму (введення знову має працювати як звичайно)."
image_badge_count: "[📎 Вкладено зображень: {count}]"
image_badge_numbered: "[📎 Зображення №{index}]"
commands:
shared:
more_suffix: " (+{count} ще)"
set_saved: "✓ {label}: встановлено '{value}' (збережено в конфігурації)"
set_session_only: "✓ {label}: встановлено '{value}' (лише для цього сеансу)"
scope_saved: "(збережено в конфігурації)"
scope_save_failed: "(лише для цього сеансу; не вдалося зберегти конфігурацію)"
scope_session: "(лише цей сеанс — додайте --global, щоб зберегти)"
unknown_argument: "(._.) Невідомий аргумент: {arg}"
usage: "Використання: {usage}"
needs_active_session: "Для {command} потрібен активний сеанс чату."
unavailable_no_session: "{label} недоступно (немає активного сеансу)."
state_on: "УВІМКНЕНО"
state_off: "ВИМКНЕНО"
error: "Помилка: {error}"
agent_busy: "Агент зайнятий. Дочекайтеся завершення поточного ходу, потім повторіть {command}."
no_active_agent_session: "Немає активного сеансу агента."
could_not_generate_diff: "Не вдалося створити diff"
busy:
short_queue: "ставить у чергу на наступний хід"
short_steer: "скеровує в поточний запуск (після наступного виклику інструмента)"
short_interrupt: "негайно перенаправляє поточний запуск"
long_queue: "Enter ставитиме додаткове введення в чергу, поки Hermes зайнятий."
long_steer: "Enter скеровуватиме ваше повідомлення в поточний запуск (після наступного виклику інструмента)."
long_interrupt: "Enter перенаправлятиме поточний запуск, поки Hermes зайнятий; /stop і далі скасовує його."
usage: "Використання: /busy [queue|steer|interrupt|status]"
status: "Режим введення під час зайнятості: {mode}"
enter_while_busy: "Enter під час зайнятості: {behavior}"
label: "Режим введення під час зайнятості"
reasoning:
headline_on: "УВІМКНЕНО"
headline_off: "ВИМКНЕНО"
headline_full: "ПОВНІСТЮ"
headline_clamped: "ОБРІЗАНО до 10 рядків"
note_show: "Роздуми моделі показуватимуться під час і після кожної відповіді."
note_full: "Підсумкове вікно після відповіді виводитиме роздуми повністю."
display_on: "увімкнено ✓"
display_off: "вимкнено"
full_state_full: "повністю"
full_state_clamped: "обрізано до 10 рядків"
effort_line: "Зусилля міркувань: {level}"
display_line: "Показ міркувань: {display} ({full})"
usage: "Використання: /reasoning <none|minimal|low|medium|high|xhigh|max|ultra|show|hide|full|clamp> [--global]"
display_saved: "✓ Показ міркувань: {headline} (збережено)"
display_off_note: "Примітка: показ міркувань ВИМКНЕНО — виконайте /reasoning show, щоб його побачити."
valid_levels: "Допустимі рівні: none, minimal, low, medium, high, xhigh, max, ultra"
valid_display: "Показ: show, hide"
valid_scope: "Область: типово лише для сеансу, --global щоб зберегти"
effort_set: "✓ Зусилля міркувань встановлено на '{effort}' {scope}"
indicator:
usage: "Використання: /indicator [{styles}]"
status: "Стиль індикатора зайнятості: {style}"
unknown_style: "(._.) Невідомий стиль індикатора: {arg}"
label: "Стиль індикатора зайнятості"
note: "TUI застосує новий стиль під час наступного перемалювання."
fast:
not_supported: "(._.) /fast доступний лише для моделей, що підтримують швидкий режим (OpenAI Priority Processing або Anthropic Fast Mode)."
feature_generic: "Швидкий режим"
feature_anthropic: "Anthropic Fast Mode"
feature_openai: "Priority Processing"
feature_ultrafast: "OpenAI Ultrafast"
ultrafast_not_supported: "(._.) Ultrafast недоступний для {model} у цьому обліковому записі або маршруті."
usage: "Використання: /fast [normal|fast|auto|cold|ultrafast|status] [--global]"
status: "{feature}: {status}"
set_to: "✓ {feature}: встановлено {value} {scope}"
hatch:
progress_compose: "┊ збираємо спрайтшит…"
progress_save: "┊ зберігаємо…"
progress_drawing: "┊ малюємо {state}…"
describe_prompt: "(o_o) Опишіть свого улюбленця: "
usage: "(o_o) Використання: /hatch <description> (напр. /hatch крихітна кіберлисиця)"
default_name: "Улюбленець"
designing: "(o_o) Створюємо дизайн '{concept}'… (близько хвилини викликів моделі зображень)"
base_failed: "(x_x) Не вдалося згенерувати базовий вигляд: {error}"
no_base_draft: "(x_x) Базовий ескіз не повернувся — спробуйте ще раз."
failed: "(x_x) Вилуплення не вдалося: {error}"
hatched: "(^_^)b {name}: вилуплено й прийнято — незабаром з'явиться!"
pet:
is_out: "(^_^)b {name} виходить — незабаром з'явиться."
put_away_named: "(-_-)zzZ {name} сховано."
put_away: "(-_-)zzZ Улюбленця сховано."
usage_scale: "(o_o) Використання: /pet scale <factor> (напр. /pet scale 0.5)"
scale_set: "(^_^) Масштаб улюбленця → {scale}."
fetching: "(o_o) Отримуємо '{name}' з petdex…"
adopt_failed: "(x_x) Не вдалося прийняти '{name}': {error}"
error: "(x_x) {error}"
diff:
label_working: "Неіндексовані"
label_staged: "Індексовані"
label_all: "Усі (відносно HEAD)"
untracked: "Невідстежувані:"
and_more: "... і ще {count}"
more_lines: "... (ще {count} рядків — {hint})"
stat_hint: "виконайте /diff --stat для зведення"
stat_hint_session: "виконайте /diff session --stat для зведення"
not_enabled: "Контрольні точки не ввімкнено, тому базової лінії сеансу немає.\nУвімкніть: hermes --checkpoints\nАбо в config.yaml: checkpoints: { enabled: true }\n(Звичайний /diff все одно працює — він використовує git напряму.)"
no_session_changes: "Змін немає — Hermes ще не редагував тут жодного файлу."
rollback:
not_enabled: "Контрольні точки не ввімкнено.\nУвімкніть: hermes --checkpoints\nАбо в config.yaml: checkpoints: { enabled: true }"
none_here_showing_all: "Контрольних точок для {cwd} немає — показано всі каталоги."
all_directories: "усі каталоги"
usage_diff: "Використання: /rollback diff <N>"
no_changes_since: "Змін від цієї контрольної точки немає."
more_lines: "... (ще {count} рядків, показано перші 80)"
restored_all: "✅ Відновлено до контрольної точки {hash}: {reason}"
restored_file: "✅ {file} відновлено з контрольної точки {hash}: {reason}"
snapshot_saved: "Знімок перед відкатом збережено автоматично."
chat_turn_undone: "Хід чату скасовано відповідно до відновленого стану файлів."
snapshot:
unknown_subcommand: "Невідома підкоманда: {subcommand}"
usage: "Використання: /snapshot [list|create [label]|restore <id>|prune [N]]"
none_yet: "Знімків стану ще немає."
create_hint: "Створити: /snapshot create [label]"
list_header: "Знімки стану ({dir}/state-snapshots/):"
col_num: "#"
col_id: "ID"
col_files: "Файли"
col_size: "Розмір"
col_label: "Мітка"
created: "Знімок створено: {snapshot_id}"
nothing_to_snapshot: "Файлів стану для знімка не знайдено."
usage_restore: "Використання: /snapshot restore <snapshot-id>"
most_recent: "Найновіший: {snapshot_id}"
invalid_number: "Недійсний номер знімка. Використовуйте 1-{max}."
restored: "Стан відновлено з: {snapshot_id}"
restart_recommended: "Рекомендовано перезапустити процеси шлюзу та панелі керування, щоб вони підхопили зміни state.db."
not_found: "Знімок не знайдено: {snapshot_id}"
restore_incomplete: "Знімок {snapshot_id} відновлено не повністю: деякі файли відхилено (див. журнали)"
usage_prune: "Використання: /snapshot prune [keep-count]"
pruned: "Видалено старих знімків: {deleted} (залишено {keep})."
export:
usage: "Використання: /export [profile] [-o output.tar.gz]"
exported: "✓ '{name}' експортовано до {path}"
share_hint: "Поділіться: інший користувач виконує /import або `hermes profile import <archive>`."
import:
usage: "Використання: /import <archive.tar.gz> [--name <name>]"
imported: "✓ Профіль '{name}' імпортовано до {path}"
wrapper_created: "Обгортку створено: {path}"
use_it: "Використання: hermes -p {name}"
stop:
none_running: "Немає фонових процесів, що виконуються."
stopping: "Зупинення фонових процесів ({count})..."
stopped: "✅ Зупинено процесів: {count}."
interrupted_delegations: "✅ Перервано фонових делегувань: {count}."
agents:
running_processes: "Активні процеси: {count}"
recently_finished: "Недавно завершені: {count}"
background_delegations: "Фонові делегування: {count} виконується"
no_progress: " · без прогресу {seconds}с — переривання"
quiet: " · тиша {seconds}с"
in_tool: "у {tool}"
between_turns: "між ходами"
child_line: "└ дочірній {index}: {api_calls} викликів api · {doing}"
last_activity: " · остання активність {seconds}с тому"
agent_running: "Агент: працює"
agent_idle: "Агент: очікує"
journey:
failed: "Помилка /journey: {error}"
paste:
no_image: "(._.) У буфері обміну немає зображення"
attached: "📎 Зображення №{index} додано з буфера обміну"
extract_failed: "(>_<) У буфері обміну є зображення, але не вдалося його витягти"
copy:
nothing_yet: "Поки що нічого копіювати."
usage: "Використання: /copy [номер]"
invalid_number: "Недійсний номер відповіді. Використовуйте 1-{max}."
nothing_in_responses: "У відповідях асистента поки що нічого копіювати."
nothing_in_response: "У цій відповіді асистента нічого копіювати."
copied_osc52: "Відповідь асистента №{index} скопійовано через OSC 52 (потрібна підтримка з боку термінала)"
copied: "Відповідь асистента №{index} скопійовано в буфер обміну"
failed: "Не вдалося скопіювати в буфер обміну: {error}"
image:
usage: "Використання: /image <path> напр. /image {example}"
not_found: "(>_<) Файл не знайдено: {path}"
unsupported: "(._.) Непідтримуваний файл зображення: {name}"
attached: "📎 Додано зображення: {name}"
now_type_prompt: "Тепер введіть запит (або використайте --image у режимі одиночного запиту): {text}"
tools:
usage: "(._.) Використання: /tools {subcommand} <name> [name ...]"
example_toolset: "Вбудований набір: /tools {subcommand} web"
example_mcp: "Інструмент MCP: /tools {subcommand} github:create_issue"
disabling: "Вимкнення {names}..."
enabling: "Увімкнення {names}..."
session_reset: "Сеанс скинуто. Нова конфігурація інструментів активна."
profile:
profile: "Профіль: {profile}"
home: "Домашній каталог: {home}"
handoff:
usage: "Використання: /handoff <platform>"
usage_detail_1: "Передає поточний сеанс у домашній канал цієї платформи."
usage_detail_2: "Сеанс CLI на цьому завершується; пізніше відновіть його через /resume."
already_in_flight: "Сеанс уже передається. Дочекайтеся завершення, потім повторіть."
queued: "Передачу '{title}' → {platform} поставлено в чергу (домашній канал: {home})."
waiting: "Очікування, поки шлюз її підхопить..."
config_load_failed: "Не вдалося завантажити конфігурацію шлюзу: {error}"
unknown_platform: "Невідома платформа '{platform}'."
platform_not_enabled: "Платформу '{platform}' не налаштовано або не ввімкнено у шлюзі."
no_home_channel: "Для {platform} не налаштовано домашній канал."
set_home_hint: "Спочатку задайте його через /sethome у чаті призначення."
session_row_failed: "Не вдалося створити запис сеансу в state.db: {error}"
picked_up: "Шлюз підхопив передачу; триває перенесення..."
complete: "↻ Передачу завершено. Сеанс тепер активний на {platform}."
resume_hint: "Пізніше відновіть його в цьому CLI командою: /resume {title}"
unknown_error: "невідома помилка"
failed: "Передача не вдалася: {error}"
session_intact_retry: "Ваш сеанс CLI не постраждав. Спробуйте /handoff ще раз або виконайте /resume на платформі вручну."
still_transferring: "Перенесення триває (агент відтворює ваш сеанс на місці призначення)..."
taking_long: "Шлюз завершує перенесення незвично довго."
check_platform: "Перевірте {platform} — сеанс ще може туди надійти."
no_longer_waiting: "Цей CLI більше не очікує. Не продовжуйте цей сеанс тут;"
retry_when_settled: "якщо нічого не надійде, повторіть /handoff, коли стан стабілізується."
timed_out: "Час очікування шлюзу вичерпано. Чи запущено `hermes gateway`?"
session_intact: "Ваш сеанс CLI не постраждав."
resume:
usage: "Використання: /resume <номер|session_id_або_назва>"
tip_find_sessions: "Порада: використовуйте /history або `hermes sessions list`, щоб знайти сеанси."
already_on: "Ви вже в цьому сеансі."
resumed_one: "↻ Сеанс {session_id}{title} відновлено ({count} повідомлення користувача, усього {total})"
resumed_other: "↻ Сеанс {session_id}{title} відновлено ({count} повідомлень користувача, усього {total})"
resumed_empty: "↻ Сеанс {session_id}{title} відновлено — повідомлень немає, починаємо з чистого аркуша."
not_found: "Сеанс не знайдено: {target}"
not_found_hint: "Використайте /sessions або `hermes sessions list`, щоб переглянути доступні сеанси."
compressed_redirect: "Сеанс {session_id} було стиснуто в {resolved_id}; відновлюємо сеанс-нащадок із вашою стенограмою."
sessions:
none_yet: "(._.) Попередніх сеансів ще немає."
branch:
branched_one: "⑂ Створено гілку сеансу \"{title}\" ({count} повідомлення користувача)"
branched_other: "⑂ Створено гілку сеансу \"{title}\" ({count} повідомлень користувача)"
original_session: "Початковий сеанс: {session_id}"
branch_session: "Сеанс гілки: {session_id}"
worktree:
active: "Активне робоче дерево: {path}"
branch: "Гілка: {branch}"
none_active: "У цього сеансу немає активного робочого дерева."
hint_new: "/worktree new [name] — створити робоче дерево й перенести в нього цей сеанс"
hint_prune: "/worktree prune — прибрати застарілі дерева та злиті гілки"
not_in_repo_note: "(не всередині git-репозиторію)"
unknown_subcommand: "Невідома підкоманда /worktree: {subcommand}"
usage: "Використання: /worktree [new [name] | list]"
new_requires_repo: "❌ /worktree new можна виконувати лише всередині git-репозиторію."
not_in_repo: "Не всередині git-репозиторію."
actions_planned: "Заплановано дій: {count}."
actions_done: "Виконано дій: {count}."
nothing_to_reclaim: "Нічого прибирати — решта дерев/гілок містять реальну роботу."
preserved: "Збережено дерев із реальною роботою: {count}:"
list_failed: "Не вдалося отримати список робочих дерев."
enter_failed: "⚠ Робоче дерево створено, але не вдалося в нього перейти: {error}"
ready: "✅ Робоче дерево готове: {path}"
tools_in_worktree: "Термінал і файлові інструменти тепер працюють у робочому дереві."
personality:
title: "(^o^)/ Особистості"
none_option: "(без накладання особистості)"
usage: "Використання: /personality <name> (* = активна)"
unknown: "(._.) Невідома особистість: {name}"
available: "Доступні: none, {available}"
scope_saved: "(збережено в конфігурації)"
scope_session: "(лише для цього сеансу)"
cleared: "{face} Особистість очищено {scope}"
cleared_note: "Без накладання особистості — використовується базова поведінка агента."
set_to: "{face} Особистість встановлено на '{name}' {scope}"
cron:
repeat_must_be_integer: "(._.) --repeat має бути цілим числом"
unknown_command: "(._.) Невідома команда cron: {subcommand}"
available: "Доступні: list, add, edit, pause, resume, run, remove"
overview_title: "(^_^) Заплановані завдання"
overview_commands: "Команди:"
overview_usage: "/cron list\n/cron add \"every 2h\" \"Перевірити стан сервера\" [--skill blogwatcher]\n/cron edit <job_id> --schedule \"every 4h\" --prompt \"Нове завдання\"\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: "Поточні завдання:"
skills: "Навички: {skills}"
skills_none: "Навички: немає"
next_short: "Наступний"
no_jobs_hint: "Немає запланованих завдань. Використайте '/cron add', щоб створити нове."
no_jobs: "(._.) Немає запланованих завдань."
list_header: "Заплановані завдання:"
id: "ID: {job_id}"
name: "Назва: {name}"
state: "Стан: {state}"
schedule: "Розклад: {schedule}"
schedule_repeat: "Розклад: {schedule} ({repeat})"
next_run: "Наступний запуск: {value}"
next_run_na: "Наступний запуск: н/д"
prompt: "Запит: {prompt}"
status_delivery_failed: "не доставлено: {error}"
status_error: "помилка: {error}"
last_run: "Останній запуск: {when} ({status})"
usage_add: "(._.) Використання: /cron add <schedule> <prompt>"
need_prompt_or_skill: "(._.) Вкажіть запит або хоча б одну навичку"
create_failed: "(x_x) Не вдалося створити завдання: {error}"
created: "(^_^)b Завдання створено: {job_id}"
usage_edit: "(._.) Використання: /cron edit <job_id> [--schedule ...] [--prompt ...] [--skill ...]"
job_not_found: "(._.) Завдання не знайдено: {job_id}"
update_failed: "(x_x) Не вдалося оновити завдання: {error}"
updated: "(^_^)b Завдання оновлено: {job_id}"
usage_action: "(._.) Використання: /cron {subcommand} <job_id>"
pause_failed: "(x_x) Не вдалося призупинити завдання: {error}"
resume_failed: "(x_x) Не вдалося відновити завдання: {error}"
run_failed: "(x_x) Не вдалося запустити завдання: {error}"
remove_failed: "(x_x) Не вдалося видалити завдання: {error}"
removed: "(^_^)b Завдання видалено: {name} ({job_id})"
did_not_run: "(x_x) Завдання не запущено: {name} ({job_id})\n {reason}"
paused: "(^_^)b Завдання призупинено: {name} ({job_id})"
resumed: "(^_^)b Завдання відновлено: {name} ({job_id})"
triggered: "(^_^)b Завдання запущено: {name} ({job_id})"
suggestions:
failed: "Не вдалося виконати команду пропозицій: {error}"
blueprint:
failed: "Не вдалося виконати команду cron blueprint: {error}"
curator:
failed: "(._.) куратор: {error}"
kanban:
failed: "(._.) помилка kanban: {error}"
memory:
unknown_subcommand: "Невідома підкоманда /memory. Доступні: pending, approve <id>, reject <id>, approval <on|off>."
learn:
from_description: "⚡ Вивчаю навичку з вашого опису..."
from_conversation: "⚡ Вивчаю навичку з цієї розмови..."
plan:
planning: "📋 Планування: {task}"
from_conversation: "📋 Планування на основі контексту цієї розмови..."
init:
updating: "⚡ Оновлення AGENTS.md за результатами сканування проєкту..."
generating: "⚡ Генерація AGENTS.md за результатами сканування проєкту..."
background:
usage: "Використання: /bg <prompt>\nПриклад: /bg Підсумуй найкращі історії з HN сьогодні\n(Для побіжного питання про цю розмову використовуйте /btw <question>.)\nЗавдання виконується в окремому сеансі, а результати з'являться тут після завершення."
no_credentials: "(>_<) Не вдалося запустити фонове завдання: немає дійсних облікових даних."
started: "🔄 Фонове завдання #{number} запущено: «{preview}»"
task_id: "ID завдання: {task_id}"
keep_chatting: "Можна продовжити спілкування — результати з'являться після завершення."
label: "Фонове завдання #{number}"
complete: "✅ Фонове завдання #{number} завершено"
prompt: "Запит: «{preview}»"
title_suffix: "(фонове #{number})"
no_response: "(Відповідь не згенеровано)"
side_result:
complete: "{label} завершено"
failed: "❌ {label} не вдалося: {error}"
login:
label: "Вхід"
title_suffix: "(вхід)"
no_result: "(Немає результату)"
btw:
usage: "Використання: /btw <question>\nПриклад: /btw у якому файлі була та помилка?\nВідповідає на швидке питання про цю розмову, не перериваючи її.\n(Для незалежного фонового завдання використовуйте /bg <prompt>.)"
no_credentials: "(>_<) Не вдалося відповісти на побіжне питання: немає дійсних облікових даних."
header: "💬 /btw: «{preview}»"
title_suffix: "(btw)"
no_answer: "(Відповідь не згенеровано)"
bundles:
unavailable: "Підсистема пакетів навичок недоступна: {error}"
none_installed: "Пакети навичок не встановлено."
create_hint: "Створіть пакет командою: hermes bundles create <name> --skill <s1> --skill <s2>"
directory: "Каталог: {dir}"
title: "Пакети навичок"
installed_count: "(встановлено: {count}):"
default_desc: "Завантажити {count} навичок"
skills_count: "({count} навичок)"
invoke_hint: "Викликайте пакет через /<slug>. Керуйте за допомогою `hermes bundles`."
browser:
engine_not_in_use: "⚠ browser.engine має значення 'lightpanda', але він НЕ використовується: {reason}"
engine_lightpanda: "Рушій: Lightpanda — {reason} (без знімків екрана)"
binary: "Виконуваний файл: {path}"
binary_not_found: "⚠ виконуваний файл lightpanda не знайдено — {hint}"
scheme_missing: "(відсутня)"
unsupported_scheme: "⚠ Непідтримувана схема URL браузера: {scheme} (очікується одна з: http, https, ws, wss)"
invalid_port: "⚠ Недійсний порт в URL браузера: {url}"
missing_host: "⚠ В URL браузера відсутній хост: {url}"
port_occupied: "⚠ Порт {port} зайнятий іншою програмою, яка не є CDP-браузером"
port_occupied_detail: "(можливо, його використовує відладчик IDE або dev-сервер) — запускаємо на порту {launch_port}..."
launching: "Браузер сімейства Chromium не запущено з віддаленим налагодженням — спроба запуску..."
launch_failed: "⚠ Не вдалося автоматично запустити браузер сімейства Chromium"
launch_manually: "Запустіть браузер сімейства Chromium вручну:"
no_executable: "У цьому середовищі не знайдено підтримуваного виконуваного файлу браузера сімейства Chromium"
launched: "✓ Браузер сімейства Chromium запущено, слухає порт {port}"
not_responding: "⚠ Браузер запущено, але порт {port} ще не відповідає"
try_again: "Спробуйте ще раз через кілька секунд — екземпляр налагодження, можливо, ще запускається"
already_listening: "✓ Браузер сімейства Chromium уже слухає на {url}"
port_unreachable: "⚠ Порт {port} недоступний за адресою {url}"
not_connected: "Браузер не підключено — запустіть браузер сімейства Chromium із віддаленим налагодженням і повторіть /browser connect"
connected: "🌐 Браузер підключено до запущеного браузера сімейства Chromium через CDP"
endpoint: "Кінцева точка: {url}"
already_default: "Браузер не підключено до запущеного браузера сімейства Chromium (уже використовується режим за замовчуванням)"
disconnected: "🌐 Браузер від'єднано від запущеного браузера сімейства Chromium"
reverted: "Інструменти браузера повернуто до режиму за замовчуванням (локальний headless або хмарний провайдер)"
status_lightpanda: "🌐 Браузер: локальний Lightpanda (lightpanda serve)"
status_lightpanda_note: "⚡ Lightpanda: швидша навігація, без підтримки знімків екрана"
status_auto: "🌐 Браузер: локальний headless Chromium"
status_connected: "🌐 Браузер: підключено до запущеного браузера сімейства Chromium через CDP"
status_reachable: "Стан: ✓ доступний"
status_unreachable: "Стан: ⚠ недоступний (можливо, браузер не запущено)"
status_cloud: "🌐 Браузер: {provider} (хмара)"
status_connect_hint: "/browser connect — підключитися до вашого запущеного браузера сімейства Chromium"
status_disconnect_hint: "/browser disconnect — повернутися до режиму за замовчуванням"
usage: "Використання: /browser connect|disconnect|status"
usage_connect: "connect Підключити інструменти браузера до вашого запущеного сеансу браузера сімейства Chromium"
usage_disconnect: "disconnect Повернутися до бекенду браузера за замовчуванням"
usage_status: "status Показати поточний режим браузера"
remote_gateway: "/browser connect і /browser disconnect керують браузером Chromium на хості шлюзу — доступно лише з локальним шлюзом."
checking: "Перевірка віддаленого налагодження браузера Chromium за адресою {url}..."
status_gateway_default: "🌐 Браузер: типовий браузер шлюзу (немає активного CDP-з'єднання)"
heartbeat:
label: "Heartbeats"
paused: "⏸ Heartbeat призупинено: {prompt}"
none_set: "Heartbeat не налаштовано."
none_to_resume: "Немає heartbeat для відновлення."
resumed: "▶ Heartbeat відновлено (кожні {interval}): {prompt}"
cleared: "✓ Heartbeat очищено."
usage: "Використання: /heartbeat every <interval> <prompt> (напр. /heartbeat every 10m Перевір CI)"
usage_also: "Також: /heartbeat status | pause | resume | clear"
interval_too_small: "Інтервал надто малий — мінімум {min_seconds}с."
prompt_required: "Використання: /heartbeat every <interval> <prompt> — запит обов'язковий."
invalid_label: "Недійсний heartbeat"
set: "♥ Heartbeat встановлено (кожні {interval}): {prompt}"
set_note: "Спрацьовує як звичайний хід, коли сеанс простоює і минув інтервал. Керування: /heartbeat pause | resume | clear; діє лише доки працює цей процес Hermes — для постійних розкладів використовуйте `hermes cron`."
refine:
nothing_yet: "Поки що немає чого доопрацьовувати — спочатку надішліть повідомлення."
empty: "Поки що немає чого доопрацьовувати — розмова порожня."
failed: "Не вдалося запустити /refine: {error}"
focus_suffix: " (фокус: {focus})"
started: "⚗ Переглядаю цю розмову у фоні{focus} — про всі оновлення пам'яті чи навичок повідомлю після завершення."
review:
nothing_yet: "Поки що немає чого перевіряти — спочатку надішліть повідомлення."
failed: "Не вдалося запустити /review: {error}"
goal:
label: "Цілі"
continuing: "Продовжую — роблю наступний крок."
send_to_kick: "Надішліть будь-яке повідомлення, щоб запустити наступний крок."
loop:
label: "Цикли"
goal_defers_note: "Примітка: цим сеансом керує активний /goal — пробудження циклу відкладаються, доки ціль не завершиться, не буде призупинена або відкладена."
subgoal:
no_goal: "Немає активної цілі. Встановіть її через /goal <text>."
usage_remove: "Використання: /subgoal remove <n>"
remove_needs_int: "/subgoal remove: <n> має бути цілим числом (нумерація з 1)."
removed: "✓ Підціль {index} видалено: {text}"
cleared_one: "✓ Очищено {count} підціль."
cleared_other: "✓ Очищено {count} підцілей."
none_to_clear: "Немає підцілей для очищення."
added: "✓ Додано підціль {index}: {text}"
skin:
unavailable: "Рушій скінів недоступний."
current: "Поточний скін: {name}"
available_header: "Доступні скіни:"
usage: "Використання: /skin <name>"
custom_hint: "Власні скіни: покладіть YAML-файл у {dir}/skins/"
unknown: "Невідомий скін: {name}"
available: "Доступні: {names}"
saved_suffix: " (збережено)"
set_to: "Скін встановлено: {name}{saved}"
banner_note: "Примітка: кольори банера оновляться під час наступного запуску сеансу."
colors_updated: "Кольори рядка введення та TUI оновлено."
prompt_compose:
editor_header: "#! Складіть свій запит нижче. Рядки, що починаються з '#!', ігноруються.\n#! Збережіть і вийдіть, щоб надіслати; залиште порожнім, щоб скасувати."
editor_failed: "(>_<) Не вдалося відкрити редактор: {error}"
empty: "(._.) Порожній запит — нічого не надіслано."
focus:
usage: "Використання: /focus [on|off|status]"
toggle:
save_failed: "Не вдалося зберегти налаштування {setting} у config.yaml"
footer:
usage: "/footer [on|off|status]"
label: "Нижній колонтитул середовища"
fields: "Поля: {fields}"
timestamps:
usage: "/timestamps [on|off|status]"
label: "Часові позначки повідомлень"
update:
managed_action: "оновити Hermes Agent"
choice_update: "Оновити зараз"
choice_update_desc: "вийти з поточного сеансу та оновити Hermes Agent"
choice_cancel: "Скасувати"
choice_cancel_desc: "залишити поточний сеанс"
title: "☤ Оновлення Hermes Agent"
detail: "Це завершить поточний сеанс і виконає `hermes update`."
cancelled: "🟡 /update скасовано."
launching: "☤ Запуск оновлення..."
voice:
unknown_subcommand: "Невідома підкоманда voice: {subcommand}"
usage: "Використання: /voice [on|off|tts|status]"
wake:
unknown_subcommand: "Невідома підкоманда wake: {subcommand}"
usage: "Використання: /wake [on|off|status]"
enabled_in_config: "Слово активації увімкнено в конфігурації (wake_word.enabled: true)."
disabled_in_config: "Слово активації вимкнено в конфігурації (wake_word.enabled: false)."
tip_line: "✦ Порада: {tip}"
banner:
context_too_low: "⚠️ Довжина контексту лише {tokens} токенів — цього, ймовірно, надто мало для роботи агента з інструментами."
context_minimum: "Hermes потребує щонайменше {tokens} токенів. Схеми інструментів + системний промпт займають великий фіксований префікс."
fix_ollama: "Виправлення для Ollama: OLLAMA_CONTEXT_LENGTH={tokens} ollama serve"
fix_lm_studio: "Виправлення для LM Studio: задайте довжину контексту в налаштуваннях моделі → перезавантажте модель"
fix_local_server: "Виправлення: запустіть сервер із контекстом щонайменше {tokens_k}K (llama.cpp: -c {tokens}) або задайте model.ollama_num_ctx у config.yaml відповідно до вікна, яке він справді обслуговує"
fix_config: "Виправлення: задайте model.context_length у config.yaml або збільште налаштування контексту на сервері"
hermes_models_not_agentic: "⚠ Моделі Nous Research Hermes 3 і 4 НЕ є агентними й не призначені для використання з Hermes Agent."
hermes_models_lack_tools: "Вони не мають можливостей виклику інструментів, потрібних для агентних робочих процесів. Розгляньте агентну модель (Claude, GPT, Gemini, DeepSeek тощо)."
hermes_models_switch_hint: "Перемкнутися: /model sonnet або /model gpt5"
project_skills_loaded: "◆ Завантажено навичок проєкту з цього репозиторію: {count}"
project_skills_untrusted: "◆ У {root} знайдено {count} навичок проєкту, але не завантажено — виконайте `hermes skills trust`, щоб увімкнути їх."
command:
unknown_nothing_sent: "Невідома команда {command} — нічого не надіслано.{hint}"
did_you_mean_one: "Ви мали на увазі {suggestion}?"
type_help: "Введіть /help для повного списку."
ambiguous: "Неоднозначна команда: {command}"
did_you_mean_many: "Ви мали на увазі: {candidates}?"
config:
title: "(^_^) Конфігурація"
loaded: "(завантажено)"
not_found: "(не знайдено)"
microsoft_entra_id: "Microsoft Entra ID"
google_vertex_oauth: "Google OAuth (Vertex AI)"
key_cmd_token: "key_cmd token (command)"
minimax_oauth: "MiniMax OAuth"
token_provider: "Token provider"
api_key_not_set: "Не задано!"
value_not_set: "не задано"
section_model: "Модель"
section_terminal: "Термінал"
section_agent: "Агент"
section_session: "Сеанс"
label_model: "Модель:"
label_base_url: "Базовий URL:"
label_api_key: "Ключ API:"
label_environment: "Середовище:"
label_ssh_target: "Ціль SSH:"
label_working_dir: "Робочий каталог:"
label_timeout: "Тайм-аут:"
label_max_turns: "Макс. ходів:"
label_toolsets: "Набори інструментів:"
label_verbose: "Докладний режим:"
label_started: "Запущено:"
label_config_file: "Файл конфігурації:"
context:
header: "🧠 Використання контексту — {model}"
compute_failed: "(._.) Не вдалося обчислити розбивку контексту: {error}"
error:
auth: "Ваш ключ {provider} відхилено. Виконайте `hermes model`, щоб ввести його знову."
billing: "На вашому рахунку {provider} закінчилися кошти. Поповніть його у провайдера або виконайте /model, щоб перемкнутися."
model_not_found: "'{model}' недоступна на {provider}. Виконайте /model, щоб вибрати дійсну модель."
rate_limit: "{provider} обмежив частоту запитів; зачекайте хвилину або перемкніться через /model."
upstream_blocked: "Фаєрвол/CDN перед {provider} заблокував запит (справа не у вашому ключі). Задайте User-Agent через extra_headers або перемкніться через /model."
overloaded: "{provider} зараз перевантажений. За хвилину надішліть /retry або перемкніться через /model."
server_error: "У {provider} сталася внутрішня помилка. За хвилину надішліть /retry або перемкніться через /model."
timeout: "{provider} не відповів вчасно. Надішліть /retry або перемкніться через /model."
unknown: "Запит до моделі не вдався. Виконайте /model, щоб перемкнутися, або `hermes doctor`, щоб перевірити налаштування."
the_provider: "провайдер"
the_current_model: "поточна модель"
with_details: "{lead}\nДеталі: {details}"
agent_init_failed: "Hermes не вдалося встановити з'єднання з моделлю: {error}. Ваше повідомлення не надіслано. Виконайте `hermes doctor`, щоб перевірити налаштування, або /model, щоб вибрати іншого провайдера."
gateway:
starting: "Запуск Hermes Gateway (платформи обміну повідомленнями)..."
gateway_status:
header: "(✿◠‿◠) Стан шлюзу"
platform_config_header: "Конфігурація платформ обміну повідомленнями:"
enabled: "Увімкнено"
not_configured: "Не налаштовано ({env_var})"
conversations_persist: "Розмови зберігаються до /new або /reset."
to_start: "Щоб запустити шлюз:"
config_file: "Файл конфігурації: {path}"
load_error: "Помилка завантаження конфігурації шлюзу: {error}"
to_configure: "Щоб налаштувати шлюз:"
step_env_vars: "1. Задайте змінні середовища:"
step_config: "2. Або налаштуйте параметри в {path}"
help:
header: "(^_^)? Доступні команди"
section_session: "Сеанс"
section_configuration: "Конфігурація"
section_tools_skills: "Інструменти й навички"
section_info: "Інформація"
section_exit: "Вихід"
section_context: "Контекст"
section_background_automation: "Фон і автоматизація"
usage_suffix: "{description} (використання: /{command} {args})"
alias_suffix: "{description} (псевдонім для /{command})"
skill_commands: "Команди навичок"
skill_bundles: "Пакети навичок"
quick_commands: "Швидкі команди"
n_installed: "встановлено: {count}"
n_configured: "налаштовано: {count}"
n_skills: "навичок: {count}"
load_n_skills: "Завантажити {count} навичок"
no_skill_commands: "Команди навичок не встановлено."
matching_query: "що відповідають '{query}'"
to_list_them: "щоб переглянути їх"
filtered_by: "Відфільтровано за '{query}' — виконайте /help для повного списку."
tip_line: "Порада: /help skills показує команди навичок · /help <text> фільтрує · Ctrl+P відкриває палітру команд"
multiline_hint: "Кілька рядків: Ctrl+J, Alt+Enter або \\\\+Enter для нового рядка"
draft_editor_hint: "Редактор чернетки: Ctrl+G (Alt+G у VSCode/Cursor)"
attach_image_hint: "Прикріпити зображення: /image {path} або почніть запит зі шляху до локального зображення"
paste_image_hint: "Вставити зображення: Alt+V (або /paste)"
insights:
no_session_data: "Даних сеансу ще немає."
mcp_watch:
changed_reload_skipped: "🔄 Конфігурацію MCP-серверів змінено — перезавантаження пропущено (автоперезавантаження вимкнено)."
not_applied_run: "Нові налаштування ще НЕ застосовано. Щоб застосувати їх зараз, виконайте:"
cache_note: "⚠️ Примітка: /reload-mcp перебудовує набір інструментів та інвалідує кеш промптів провайдера (наступне повідомлення повторно надішле всі вхідні токени)."
changed_reloading: "🔄 Конфігурацію MCP-серверів змінено — перепідключення..."
plugin:
command_error: "Помилка команди плагіна: {error}"
quick:
no_target: "Для швидкої команди '{command}' не визначено ціль"
unsupported_type: "Швидка команда '{command}' має непідтримуваний тип (підтримуються: 'exec', 'alias')"
no_command: "Для швидкої команди '{command}' не визначено команду"
no_output: "Команда не повернула виводу"
timed_out: "Час очікування швидкої команди минув (30с)"
error: "Помилка швидкої команди: {error}"
reload_mcp:
title: "⚠️ /reload-mcp — попередження про інвалідацію кешу промптів"
detail: "Перезавантаження MCP-серверів перебудовує набір інструментів для цього сеансу\nта інвалідує кеш промптів провайдера. Наступне повідомлення повторно\nнадішле всі вхідні токени (може бути дорого на моделях із довгим контекстом\nабо високим рівнем міркувань)."
choice_once: "Схвалити один раз"
choice_once_hint: "перезавантажити зараз"
choice_always: "Завжди схвалювати"
choice_always_hint: "перезавантажити зараз і назавжди приховати цей запит"
choice_cancel: "Скасувати"
choice_cancel_hint: "залишити MCP-інструменти без змін"
unchanged: "MCP-інструменти без змін."
always_msg: "🔒 Наступні виклики /reload-mcp виконуватимуться без підтвердження."
once_verb: "перезавантаження"
reloading: "🔄 Перезавантаження MCP-серверів..."
reconnected: "♻️ Перепідключено: {names}"
added: "➕ Додано: {names}"
removed: "➖ Видалено: {names}"
tools_available: "🔧 {tools} інструмент(ів) доступно з {servers} сервер(ів)"
agent_updated: "✅ Агента оновлено — доступно {count} інструмент(ів)"
reload_skills:
reloading: "🔄 Перезавантаження навичок..."
total: "📚 {count} навичок(и) доступно"
added_header: "➕ Додані навички:"
removed_header: "➖ Видалені навички:"
session_store:
unavailable_rich: "[bold yellow]⚠ Сховище сеансів недоступне[/bold yellow] — ця розмова [bold]НЕ буде збережена[/bold], і її не можна буде відновити пізніше. Пошук у минулих сеансах також вимкнено.\n Причина: {reason}.\n {action}\n [dim]Деталі: {details}[/dim]"
unavailable_plain: "ПОПЕРЕДЖЕННЯ: сховище сеансів недоступне — ця розмова НЕ буде збережена, і її не можна буде відновити пізніше. Причина: {reason}. {action}"
shell:
command_denied: "Команду відхилено: {reason}"
flagged_as_dangerous: "позначено як небезпечну"
exited: "! завершено з кодом {code}"
skills:
bundle_load_failed: "Не вдалося завантажити набір навичок для {command}"
loading_bundle: "Завантаження набору: {name} ({count} навичок)"
skipped_missing: "Пропущено відсутні навички: {names}"
stacked_load_failed: "Не вдалося завантажити стек навичок для {command}"
loading_stacked: "Завантаження {count} навичок стеком: {names}"
loading_skill: "Завантаження навички: {name}"
skill_load_failed: "Не вдалося завантажити навичку для {command}"
tools:
none_available: "(;_;) Немає доступних інструментів"
header: "(^_^)/ Доступні інструменти"
total: "Усього: {count} інструментів ヽ(^o^)ノ"
toolsets:
header: "(^_^)b Доступні набори інструментів"
currently_enabled_legend: "(*) = зараз увімкнено"
tip_enable_all: "Порада: використовуйте 'all' або '*', щоб увімкнути всі набори інструментів"
example: "Приклад: python cli.py --toolsets web,terminal"
usage:
unknown_subcommand: "Невідома підкоманда /usage: {args}. Спробуйте /usage або /usage reset [--force]."
reset_wrong_provider: "Накопичені скидання лімітів доступні лише з провайдером openai-codex."
reset_switch_hint: "Спочатку перемкніться через `/model` або `hermes auth`."
checking_reset_credits: "⏳ Перевірка накопичених кредитів скидання..."
codex_timeout: "❌ Час очікування відповіді від бекенда Codex минув — спробуйте трохи пізніше."
no_api_calls: "(._.) У цьому сеансі ще не було викликів API."
header_session: "📊 Використання токенів сеансу"
label_model: "Модель:"
label_input_tokens: "Вхідні токени:"
label_output_tokens: "Вихідні токени:"
label_reasoning_subset: "↳ Міркування (частина):"
label_prompt_tokens_total: "Токени промпту (усього):"
label_completion_tokens: "Токени відповіді:"
label_total_tokens: "Усього токенів:"
label_api_calls: "Виклики API:"
label_session_duration: "Тривалість сеансу:"
label_current_context: "Поточний контекст:"
label_messages: "Повідомлень:"
label_compressions: "Стиснень:"
verbose:
label_off: "Прогрес інструментів: OFF"
detail_off: "тихий режим, лише остаточна відповідь."
label_new: "Прогрес інструментів: NEW"
detail_new: "показувати кожен новий інструмент (без повторів)."
label_all: "Прогрес інструментів: ALL"
detail_all: "показувати кожен виклик інструмента."
label_verbose: "Прогрес інструментів: VERBOSE"
detail_verbose: "повні аргументи, результати та блоки роздумів."
whoami:
you_label: "Ви:"
you_value: "cli (локальний термінал)"
user_label: "Користувач:"
tier_label: "Рівень:"
tier_value: "без обмежень"
slash_commands_label: "Слеш-команди:"
slash_commands_value: "усі доступні"
worktree:
shallow_clone_keeping: "⚠ Неглибокий клон — неможливо перевірити стан push, залишаємо: {path}"
next_session_deepens: "Наступний сеанс `hermes -w` поглибить клон і автоматично видалить злиті робочі дерева."
unpushed_keeping: "⚠ У робочому дереві є невідправлені коміти, залишаємо: {path}"
uncommitted_keeping: "⚠ У робочому дереві є незафіксовані зміни, залишаємо: {path}"
kept_reason: "⚠ Робоче дерево збережено ({reason}): {path}"
clean_up_manually: "Щоб очистити вручну: git worktree remove --force {path}"
cleaned_up: "✓ Робоче дерево очищено: {path}"
exit_question_dirty: "У цьому робочому дереві є незафіксовані зміни: {path}"
exit_question_unpushed: "У цьому робочому дереві є невідправлені коміти: {path}"
exit_choice_keep: "Залишити робоче дерево (типово)"
exit_choice_archive: "Архівувати й видалити (можна відновити)"
exit_choice_discard: "Видалити й відкинути зміни"
archiving: "Архівування {path} … (для великого дерева це може зайняти час)"
archived: "✓ Робоче дерево заархівовано в {ref} і видалено: {path}"
restore_hint: "Відновити: hermes worktree restore {name}"
archive_failed: "✗ Не вдалося заархівувати {path}, залишаємо: {error}"
archived_kept: "✓ Робоче дерево заархівовано в {ref}, але збережено ({reason}): {path}"
sweep_archived_removed: "заархівовано + видалено → {ref}"
sweep_archived_kept: "заархівовано, збережено ({reason}) → {ref}"
discarded: "Робоче дерево видалено, зміни відкинуто: {path}"
display:
verb:
web_search: "Шукає в інтернеті"
web_extract: "Читає"
browser_navigate: "Переглядає"
browser_click: "Клацає"
browser_type: "Друкує"
read_file: "Читає"
write_file: "Записує"
patch: "Редагує"
search_files: "Шукає файли"
terminal: "Виконує"
execute_code: "Виконує код"
image_generate: "Генерує зображення"
video_generate: "Генерує відео"
text_to_speech: "Генерує мовлення"
vision_analyze: "Розглядає зображення"
session_search: "Шукає в минулих сеансах"
skill_view: "Читає навичку"
skills_list: "Переглядає навички"
skill_manage: "Оновлює навичку"
delegate_task: "Делегує"
cronjob_manage: "Планує"
clarify: "Запитує"
memory: "Оновлює пам'ять"
todo_list: "Оновлює завдання"
verb_connector:
search: " за запитом "
default: " "
bridge_generating:
tool_call: "виклик інструмента"
tool_search: "пошук інструментів"
tool_describe: "деталі інструмента"
status_phrase:
verb: "{verb}"
using_tool: "використовує {tool}"
preview:
shell_plus_one: "{first} + {count} команда"
shell_plus_many: "{first} + {count} команд"
delegate_tasks: "{count} завдань: {goals}"
delegate_parallel_tasks: "{count} паралельних завдань"
todo_verb_updating: "оновлення"
todo_verb_planning: "планування"
todo_reading: "читання списку завдань"
todo_tasks: "{verb} {count} завдань"
missing_old_text: "<відсутній old_text>"
send_message_to: "до {target}: «{message}»"
session_search_recall: "пригадати: «{query}»"
diff:
review_header: " ┊ diff перевірки"
omitted_lines: "… пропущено {count} рядків diff"
omitted_files: " ще у {count} файлах/розділах"
thinking_verbs: "розмірковує,обмірковує,міркує,роздумує,зважує,обдумує,осмислює,замислюється,обробляє,аналізує,розбирає,обчислює,синтезує,формулює,генерує ідеї"
spinner:
tool_line: " [інструмент] {message}"
done_line: " [готово] {message}{elapsed}"
failure:
file_not_found: "Файл не знайдено: {name}"
terminal_backend_unavailable: "бекенд термінала недоступний"
exit_code: " [вихід {code}]"
memory_full: " [заповнено]"
generic: " [помилка]"
generic_word: "помилка"
cute:
verb:
search: "пошук"
fetch: "завантаження"
terminal: "$"
read: "читання"
write: "запис"
patch: "правка"
find: "знайти"
grep: "grep"
navigate: "перехід"
snapshot: "знімок"
click: "клік"
type: "ввід"
scroll: "прокрутка"
back: "назад"
press: "натиск"
images: "зображення"
vision: "перегляд"
plan: "план"
recall: "пригадати"
memory: "пам'ять"
skills: "навички"
skill: "навичка"
create: "створення"
speak: "мовлення"
send: "надсилання"
cron: "cron"
exec: "exec"
browser: "браузер"
delegate: "делегування"
proc: "proc"
fetch_pages: "сторінки"
todo_progress: "{done}/{total} завдань"
todo_reading: "читання завдань"
todo_update_progress: "оновлення {done}/{total} ✓"
todo_update_count: "оновлення {count} завдань"
todo_count: "{count} завдань"
cron_task_fallback: "завдання"
cron_create: "створити {label}"
cron_listing: "перелік"
delegate_parallel: "паралельно"
process_list: "ls процесів"
snapshot_full: "повний"
snapshot_compact: "компактний"
images_extracting: "витягування"
vision_analyzing_page: "аналіз сторінки"
skills_list: "список {category}"
skills_all: "усі"
scroll:
up: "вгору"
down: "вниз"
left: "вліво"
right: "вправо"
fallback_tool_name: "інструмент"
fallback_done: "готово"
completed: "┊ ⚡ {tool} завершено {duration}"
iteration_progress:
unbounded: "ітерація {n}"
bounded: "ітерація {n}/{max}"
review:
routing_fallback_warning: "⚠ auxiliary.background_review.provider='{task_provider}' (модель '{task_model}') не вдалося маршрутизувати ({error}); використовується резервний варіант {provider}/{model}"
reasoning_effort_warning: "⚠ auxiliary.background_review.reasoning_effort='{effort}' не діє, поки модель перевірки не є основною моделлю"
memory_op_line: "{label} {glyph} {preview}"
skill_patched_verbose: "📝 Навичку '{name}' виправлено: «{old}» → «{new}»"
skill_changed_verbose: "📝 Навичку '{name}' {verb}: {description}"
skill_message_verbose: "📝 {message}"
skill_action: "Навичка: {action}"
label_updated: "Оновлено: {label}"
skill_result: "Навичку '{name}' {verb}{path}"
skill_verb:
created: "створено"
rewritten: "переписано"
patched: "виправлено"
written: "записано"
removed: "видалено"
deleted: "вилучено"
label:
skill: "Навичка"
memory: "Пам'ять"
user: "Профіль користувача"
summary_cli: " 💾 Перевірка самовдосконалення: {summary}"
summary_callback: "💾 Перевірка самовдосконалення: {summary}"
aux_failure_label: "фонова перевірка"
notice:
uncompressed_context_overflow: "⚠️ Контекст сеансу (~{tokens} токенів) перевищує контекстне вікно моделі (~{context_length} токенів), а стискання вимкнено (compression.enabled: false). Скористайтеся /compact, щоб стиснути історію, або увімкніть стискання в config.yaml."
explainer:
no_reply_prefix: "⚠️ Немає відповіді: "
empty_response: "{model} цього разу не дала відповіді навіть після повторних спроб. Надішліть `continue`, щоб спробувати ще раз, або змініть модель через /model."
exit:
all_retries_exhausted_no_response: "провайдер моделі не відповів після всіх повторних спроб. Надішліть /retry або змініть модель через /model."
partial_stream_recovery: "потокове виведення зупинилося зарано, і вдалося відновити лише частину відповіді. Надішліть `continue`, щоб продовжити з місця зупинки."
fallback_prior_turn_content: "на цьому ході нового вмісту не створено; показано відновлений попередній контекст. Надішліть `continue`, щоб повторити."
redirect_restart_limit_exceeded: "запит скасовувався новим виправленням на кожній спробі, тому хід зупинено замість нескінченних повторів. Ваше останнє виправлення поставлено в чергу як наступне повідомлення."
rebuilt_restart_limit_exceeded: "кожен провайдер у ланцюжку резервування раз за разом перемикався далі, тому хід зупинено замість нескінченних повторів. Надішліть `continue` або змініть провайдера."
budget_exhausted: "бюджет ітерацій/вартості на хід вичерпано до отримання остаточної відповіді. Надішліть `continue`, щоб продовжити."
ollama_runtime_context_too_small: "контекстне вікно локальної моделі виявилося надто малим, щоб завершити. Збільште розмір контексту або скористайтеся більшою моделлю."
pending_tool_result: "хід зупинився, коли результат інструмента ще очікувався, а модель не створила подальшого тексту. Надішліть `continue`, щоб вона підсумувала."
interrupted_during_api_call: "запит було перервано посеред виклику, перш ніж надійшла відповідь. Надішліть `continue`, щоб повторити."
max_iterations_reached: "досягнуто максимальну кількість ітерацій інструментів до отримання остаточної відповіді. Надішліть `continue`, щоб продовжити, або збільште `max_iterations`."
error_near_max_iterations: "поблизу ліміту ітерацій сталася помилка до отримання остаточної відповіді. Перегляньте вивід інструмента вище, а потім надішліть `continue`."
repeated_outer_errors: "хід раз за разом завершувався повторюваними помилками і був зупинений завчасно замість нескінченних повторів. Перегляньте помилки вище, а потім надішліть `continue`, щоб повторити."
persistence:
compression: "хід зупинено, бо інший процес стискав цей сеанс. Ваше повідомлення вже має бути збережене — надішліть його ще раз після завершення стиснення."
compression_closed: "хід зупинено, бо цей сеанс було замінено новим через стиснення контексту, а його активне продовження не вдалося підхопити. Саме сховище справне — оновіть клієнт (або почніть новий хід), щоб він отримав новий ідентифікатор сеансу, і надішліть повідомлення ще раз."
turn_lease: "хід зупинено, бо інший процес Hermes перебрав цей сеанс. Вашу відповідь не збережено — дочекайтеся, поки інший процес завершить роботу, і надішліть повідомлення ще раз."
session_row_missing: "цей сеанс було видалено зі сховища, поки чат ще був відкритий, і Hermes не зміг відтворити його, тому це повідомлення не збережено. Надішліть повідомлення ще раз; якщо помилка повторюється, виконайте `hermes {profile_arg}doctor`."
locked: "хід зупинено, бо сховище сеансів було зайняте (інший процес Hermes записував у базу даних стану). Ваше повідомлення вже має бути збережене — надішліть його ще раз за хвилину."
replaced: "файл бази даних сеансів було замінено під час роботи Hermes, тому це повідомлення не збережено (копія зберігається в {home}/sessions/). Зупиніть Hermes (`hermes {profile_arg}gateway stop`), виконайте `hermes {profile_arg}doctor` — не `hermes {profile_arg}doctor --fix`, який виправив би на місці не той файл — потім запустіть його знову й надішліть повідомлення ще раз. Додаткові кроки відновлення є в журналі."
deleted_wal: "інший процес Hermes досі тримає стару копію журналу випереджувального запису (WAL) бази даних сеансів, тому Hermes припинив запис, щоб не пошкодити файл, і це повідомлення не збережено (копія зберігається в {home}/sessions/). Нічого не втрачено. Закрийте всі процеси Hermes у цьому профілі (застосунок Desktop, `hermes {profile_arg}gateway stop`, панель керування, cron), виконайте `hermes {profile_arg}doctor` — він назве процес, який ще тримає журнал — потім знову запустіть Hermes і надішліть повідомлення ще раз. Не запускайте `doctor --fix` і не видаляйте файли state.db, поки вони працюють. Посібник: {recovery_docs}"
corrupt: "хід зупинено, бо база даних стану повідомила про структурне пошкодження (стенограму було б втрачено після перезапуску). Звільнення місця на диску не допоможе. Варіанти відновлення:\n1. Виконайте `hermes {profile_arg}doctor --fix`\n2. Зупиніть шлюз, потім відновіть командами:\n hermes {profile_arg}sessions recover --source {db_path} --inspect-only\n (якщо повідомляє, що відновлення можливе) hermes {profile_arg}sessions recover --source {db_path} --output recovered-state.db\n — відновлення спочатку робить знімок пошкодженого файлу; НЕ запускайте `sqlite3 ... \".recover\"` проти робочого state.db — вразливий CLI sqlite3 може пошкодити його ще більше\n3. Відновіть із резервної копії в {backups_dir}/\nПотім надішліть повідомлення ще раз."
fts_index: "хід зупинено, бо індекс пошуку сеансів (FTS5) пошкоджено і його не вдалося від'єднати, тому це повідомлення не збережено. Саме сховище повідомлень не пошкоджене: не запускайте інструменти відновлення й не відновлюйте резервну копію. Виконайте `hermes {profile_arg}doctor --fix` (або перезапустіть Hermes — він виправляє індекс під час відкриття), потім надішліть повідомлення ще раз."
disk: "Hermes не зміг зберегти цю розмову на диск, тому зупинився, щоб не втратити ваші повідомлення. Імовірно, диск переповнений: звільніть місце (або виправте права доступу до {home}/state.db), потім надішліть повідомлення ще раз."
default: "Hermes не зміг зберегти цю розмову, тому зупинився, щоб не втратити ваші повідомлення. Можливі причини: на диску закінчилося місце або інший процес Hermes утримує базу даних. Закрийте інші вікна Hermes, виконайте `hermes {profile_arg}doctor`, щоб перевірити сховище, потім надішліть повідомлення ще раз."
file_mutation:
header: "⚠️ Перевірка змін файлів: {count} правок файлів НЕ ВДАЛОСЯ застосувати в цьому ході, попри будь-які формулювання вище, які можуть свідчити про інше. Виконайте `git status` або `read_file`, щоб перевірити, що насправді збереглося."
entry: " • `{path}` — [{tool}] {preview}"
failed: "не вдалося"
shared:
and_more: " • … і ще {count}"
the_model: "Модель"
tips:
t001: "/bg <prompt> запускає завдання в окремому сеансі, а поточний залишається вільним; /btw <question> відповідає на побіжне питання про цю розмову, не перериваючи її."
t002: "/branch розгалужує поточний сеанс, щоб ви могли дослідити інший напрямок, не втрачаючи прогресу."
t003: "/compress вручну стискає контекст розмови, коли вона стає надто довгою."
t004: "/rollback показує контрольні точки файлової системи — відновлюйте файли, які змінив агент, до будь-якого попереднього стану."
t005: "/rollback diff 2 показує, що змінилося після контрольної точки 2, нічого не відновлюючи."
t006: "/rollback 2 src/file.py відновлює один файл із певної контрольної точки."
t007: "/title \"мій проєкт\" дає назву вашому сеансу — пізніше відновіть його через /resume або hermes -c."
t008: "/resume продовжує роботу з того місця, де ви зупинилися в раніше названому сеансі."
t009: "/queue <prompt> ставить повідомлення в чергу на наступний хід, не перериваючи поточний."
t010: "/undo видаляє з розмови останній обмін репліками (ваше повідомлення та відповідь асистента)."
t011: "/retry повторно надсилає ваше останнє повідомлення — корисно, коли відповідь агента вийшла не зовсім вдалою."
t012: "/verbose перемикає режим показу прогресу інструментів: off → new → all → verbose."
t013: "/reasoning high збільшує глибину роздумів моделі. /reasoning show показує міркування."
t014: "/fast перемикає пріоритетну обробку для швидших відповідей API (залежить від провайдера)."
t015: "/yolo пропускає всі запити на схвалення небезпечних команд до кінця сеансу."
t016: "/model дозволяє змінити модель посеред сеансу — спробуйте /model sonnet або /model gpt-5."
t017: "/model --global назавжди змінює вашу модель за замовчуванням."
t018: "/personality pirate вмикає веселу особистість — 14 вбудованих варіантів від kawaii до shakespeare."
t019: "/skin змінює тему CLI — спробуйте ares, mono, slate, poseidon або charizard."
t020: "/statusbar перемикає постійний рядок стану з моделлю, токенами, % заповнення контексту, вартістю та тривалістю."
t021: "/tools disable browser тимчасово вилучає інструменти браузера з поточного сеансу."
t022: "/browser connect під'єднує інструменти браузера до вашого запущеного браузера на основі Chromium через CDP."
t023: "/plugins показує встановлені плагіни та їхній стан."
t024: "/cron керує запланованими завданнями — налаштуйте повторювані запити з доставкою на будь-яку платформу."
t025: "/reload-mcp перезавантажує конфігурацію MCP-серверів на льоту, без перезапуску."
t026: "/usage показує використання токенів, розбивку вартості та тривалість сеансу."
t027: "/insights показує аналітику використання за останні 30 днів."
t028: "/paste перевіряє, чи є в буфері обміну зображення, і прикріплює його до вашого наступного повідомлення."
t029: "/profile показує, який профіль активний, і його домашній каталог."
t030: "/config стисло показує вашу поточну конфігурацію."
t031: "/stop зупиняє всі фонові процеси, запущені агентом."
t032: "@file:path/to/file.py вставляє вміст файлу безпосередньо у ваше повідомлення."
t033: "@file:main.py:10-50 вставляє лише рядки 10-50 файлу."
t034: "@folder:src/ вставляє дерево каталогу."
t035: "@diff вставляє в повідомлення ваші неіндексовані зміни git."
t036: "@staged вставляє ваші індексовані зміни git (git diff --staged)."
t037: "@git:5 вставляє останні 5 комітів із повними патчами."
t038: "@url:https://example.com завантажує та вставляє вміст вебсторінки."
t039: "Введення @ запускає автодоповнення шляхів файлової системи — інтерактивно перейдіть до будь-якого файлу."
t040: "Поєднуйте кілька посилань: \"Перевір @file:main.py та @file:test.py на узгодженість.\""
t041: "Alt+Enter вставляє новий рядок для багаторядкового введення. (Windows Terminal перехоплює Alt+Enter — використовуйте натомість Ctrl+Enter.)"
t042: "Ctrl+C перериває агента. Натисніть двічі протягом 2 секунд, щоб примусово вийти."
t043: "Ctrl+Z згортає Hermes у фон — виконайте fg у своїй оболонці, щоб повернутися."
t044: "Tab приймає текст-підказку автодоповнення або дописує слеш-команди."
t045: "Введіть нове повідомлення, поки агент працює, щоб перервати його й скерувати в інший бік."
t046: "Alt+V вставляє зображення з буфера обміну в розмову."
t047: "Вставлення 5+ рядків автоматично зберігає їх у файл і замість них додає компактне посилання."
t048: "hermes -c відновлює ваш останній сеанс CLI. hermes -c \"назва проєкту\" відновлює за назвою."
t049: "hermes -w створює ізольоване робоче дерево git (worktree) — ідеально для паралельних робочих процесів агентів."
t050: "hermes -w -q \"Виправ issue #42\" поєднує ізоляцію в робочому дереві з одноразовим запитом."
t051: "hermes chat -t web,terminal вмикає лише певні набори інструментів для сфокусованого сеансу."
t052: "hermes chat -s github-pr-workflow попередньо завантажує навичку під час запуску."
t053: "hermes chat -q \"запит\" виконує один неінтерактивний запит і завершує роботу."
t054: "hermes chat --max-turns 1000 перевизначає стандартний ліміт у 500 ітерацій на хід."
t055: "hermes chat --checkpoints вмикає знімки файлової системи перед кожною руйнівною зміною файлів."
t056: "hermes --yolo обходить усі запити на схвалення небезпечних команд протягом усього сеансу."
t057: "hermes chat --source telegram позначає сеанс тегом для фільтрування в hermes sessions list."
t058: "hermes -p work chat запускається під певним профілем, не змінюючи ваш профіль за замовчуванням."
t059: "hermes doctor --fix діагностує та автоматично виправляє проблеми з конфігурацією й залежностями."
t060: "hermes dump виводить компактне зведення налаштувань — зручно для звітів про помилки."
t061: "hermes config set KEY VALUE автоматично зберігає секрети в .env, а все інше — у config.yaml."
t062: "hermes config edit відкриває config.yaml у вашому редакторі за замовчуванням."
t063: "hermes config check шукає відсутні або застарілі параметри конфігурації."
t064: "hermes sessions browse відкриває інтерактивний вибір сеансів із пошуком."
t065: "hermes sessions stats показує кількість сеансів за платформами та розмір бази даних."
t066: "hermes sessions prune --older-than 30 очищає старі сеанси."
t067: "hermes skills search react --source skills-sh шукає в публічному каталозі skills.sh."
t068: "hermes skills check перевіряє встановлені навички з хабу на наявність оновлень."
t069: "hermes skills tap add myorg/skills-repo додає власне джерело навичок на GitHub."
t070: "hermes skills snapshot export setup.json експортує вашу конфігурацію навичок для резервного копіювання або обміну."
t071: "hermes mcp add github --command npx додає MCP-сервери з командного рядка."
t072: "hermes mcp-serve запускає сам Hermes як MCP-сервер для інших агентів."
t073: "hermes auth add дозволяє додати кілька API-ключів для ротації пулу облікових даних."
t074: "hermes completion bash >> ~/.bashrc вмикає автодоповнення через Tab для всіх команд і профілів."
t075: "hermes logs -f стежить за agent.log у реальному часі. --level WARNING --since 1h фільтрує вивід."
t076: "hermes backup створює zip-архів усього домашнього каталогу Hermes."
t077: "hermes profile create coder створює ізольований профіль, який стає окремою командою."
t078: "hermes profile create work --clone копіює вашу поточну конфігурацію та ключі в новий профіль."
t079: "hermes update автоматично синхронізує нові вбудовані навички з УСІМА профілями."
t080: "hermes gateway install налаштовує Hermes як системну службу (systemd/launchd)."
t081: "hermes memory setup дозволяє налаштувати зовнішнього провайдера пам'яті (Honcho, Mem0 тощо)."
t082: "hermes webhook subscribe створює керовані подіями маршрути вебхуків із перевіркою HMAC."
t083: "Заощаджуйте: hermes tools вимикає невикористовувані інструменти, hermes skills config скорочує набір навичок."
t084: "/reasoning low або /reasoning minimal зменшує глибину роздумів нижче стандартного рівня (medium) — швидші й дешевші відповіді."
t085: "hermes models спрямовує завдання зору, стиснення та допоміжні задачі на дешевші моделі — скорочує фонові витрати токенів на 85%+ без погіршення основної моделі чату."
t086: "Установіть display.bell_on_complete: true у config.yaml, щоб чути сигнал після завершення довгих завдань."
t087: "Установіть display.streaming: true, щоб бачити токени в реальному часі, поки модель їх генерує."
t088: "Установіть display.show_reasoning: true, щоб спостерігати за ланцюжком міркувань моделі."
t089: "Установіть display.compact: true, щоб зменшити порожній простір у виводі й ущільнити інформацію."
t090: "Установіть display.busy_input_mode: queue, щоб ставити повідомлення в чергу замість переривання агента, або steer, щоб додавати їх під час роботи через /steer."
t091: "Установіть display.resume_display: minimal, щоб пропускати повний переказ розмови під час відновлення сеансу."
t092: "Установіть compression.threshold: 0.50, щоб керувати тим, коли спрацьовує автостиснення (за замовчуванням: 50% контексту)."
t093: "Установіть agent.max_turns: 1000, щоб дозволити агенту робити більше кроків із викликами інструментів за хід."
t094: "Установіть file_read_max_chars: 200000, щоб збільшити максимальний обсяг вмісту на один виклик read_file."
t095: "Установіть approvals.mode: smart, щоб LLM автоматично схвалювала безпечні команди й відхиляла небезпечні."
t096: "Установіть fallback_model у config.yaml, щоб автоматично перемикатися на резервного провайдера."
t097: "Установіть privacy.redact_pii: true, щоб хешувати ідентифікатори користувачів і номери телефонів перед надсиланням до LLM."
t098: "Установіть browser.headed: true, щоб бачити вікно локального Chromium, поки агент працює в браузері."
t099: "Установіть worktree: true у config.yaml, щоб завжди створювати робоче дерево git (те саме, що hermes -w)."
t100: "Установіть security.website_blocklist.enabled: true, щоб заблокувати певні домени для вебінструментів."
t101: "Установіть cron.wrap_response: false, щоб доставляти сирий вивід агента без заголовка й підпису cron."
t102: "HERMES_TIMEZONE перевизначає часовий пояс сервера будь-яким рядком часового поясу IANA."
t103: "У config.yaml працює підстановка змінних середовища: використовуйте синтаксис ${VAR_NAME}."
t104: "Швидкі команди в config.yaml миттєво виконують shell-команди без витрати токенів."
t105: "Власні особистості можна визначити в config.yaml у розділі agent.personalities."
t106: "provider_routing керує сортуванням провайдерів OpenRouter, їхніми білими та чорними списками."
t107: "execute_code виконує Python-скрипти, які програмно викликають інструменти Hermes — результати не потрапляють у контекст."
t108: "delegate_task за замовчуванням запускає до 10 паралельних субагентів (delegation.max_concurrent_children) з ізольованими контекстами для паралельної роботи."
t109: "web_extract працює з URL-адресами PDF — передайте будь-яке посилання на PDF, і воно перетвориться на markdown."
t110: "search_files працює на основі ripgrep і швидший за grep — використовуйте його замість grep у терміналі."
t111: "patch використовує 9 стратегій нечіткого зіставлення, тож незначні відмінності в пробілах не зламають правки."
t112: "patch підтримує формат V4A для масових правок у кількох файлах одним викликом."
t113: "read_file пропонує схожі назви файлів, якщо файл не знайдено."
t114: "read_file автоматично усуває дублювання — повторне читання незміненого файлу повертає легку заглушку."
t115: "Вкажіть у browser.user_data_dir теку, щоб зберегти постійний профіль Chromium: входи на сайти зберігаються між сеансами."
t116: "browser.chromium_args додає додаткові прапорці Chromium до локальних сеансів браузера, наприклад --lang=de."
t117: "image_generate створює зображення за допомогою FLUX 2 Pro з автоматичним збільшенням у 2 рази."
t118: "text_to_speech перетворює текст на аудіо — у Telegram відтворюється як голосове повідомлення."
t119: "send_message може надіслати повідомлення на будь-яку підключену платформу обміну повідомленнями прямо із сеансу."
t120: "Інструмент todo допомагає агенту відстежувати складні багатокрокові завдання впродовж сеансу."
t121: "session_search виконує повнотекстовий пошук по ВСІХ минулих розмовах."
t122: "Агент автоматично зберігає у пам'ять уподобання, виправлення та факти про середовище."
t123: "/moa проганяє один складний запит через налаштований набір моделей Mixture of Agents."
t124: "Команди терміналу підтримують фоновий режим із notify_on_complete для тривалих завдань."
t125: "Фонові процеси терміналу підтримують watch_patterns для сповіщень про певні рядки виводу."
t126: "Інструмент terminal підтримує 6 бекендів: local, Docker, SSH, Modal, Daytona та Singularity."
t127: "Кожен профіль має власну конфігурацію, ключі API, пам'ять, сеанси, навички та cron-завдання."
t128: "Назви профілів стають командами оболонки — 'hermes profile create coder' створює команду 'coder'."
t129: "hermes profile export coder -o backup.tar.gz створює переносний архів профілю."
t130: "Якщо два профілі випадково використовують один токен бота, другий шлюз блокується зі зрозумілою помилкою."
t131: "Сеанси автоматично отримують описові назви після першого обміну — називати вручну не потрібно."
t132: "Назви сеансів підтримують спадковість: \"мій проєкт\" → \"мій проєкт #2\" → \"мій проєкт #3\"."
t133: "При виході Hermes виводить команду для відновлення з ID сеансу та статистикою."
t134: "hermes sessions export backup.jsonl експортує всі сеанси для резервного копіювання чи аналізу."
t135: "hermes -r SESSION_ID відновлює будь-який конкретний минулий сеанс за його ID."
t136: "Пам'ять — це заморожений знімок: зміни з'являються в системному промпті лише на початку наступного сеансу."
t137: "Записи пам'яті автоматично скануються на шаблони ін'єкції промптів і витоку даних."
t138: "Агент має два сховища пам'яті: особисті нотатки (~2200 символів) і профіль користувача (~1375 символів)."
t139: "Виправлення, які ви даєте агенту (\"ні, зроби ось так\"), часто автоматично зберігаються в пам'ять."
t140: "Понад 80 вбудованих навичок для github, creative, mlops, productivity, research та іншого."
t141: "Кожна встановлена навичка автоматично стає slash-командою — введіть /, щоб побачити їх усі."
t142: "hermes skills install official/security/1password встановлює необов'язкові навички з репозиторію."
t143: "Навички можуть обмежуватися певними ОС — деякі завантажуються лише на macOS або Linux."
t144: "skills.external_dirs у config.yaml дозволяє завантажувати навички з власних каталогів."
t145: "Агент може створювати власні навички як процедурну пам'ять за допомогою skill_manage."
t146: "/plan записує план реалізації у markdown до .hermes/plans/, нічого не виконуючи."
t147: "До cron-завдань можна прикріплювати навички: hermes cron add --skill blogwatcher \"Check for new posts\"."
t148: "Цілі доставки cron включають telegram, discord, slack, email, sms і ще 12+ платформ."
t149: "Якщо відповідь cron починається з [SILENT], доставка пригнічується — зручно для завдань лише з моніторингом."
t150: "Cron підтримує відносні затримки (30m), інтервали (every 2h), cron-вирази та часові мітки ISO."
t151: "Cron-завдання виконуються в повністю нових сеансах агента — запити мають бути самодостатніми."
t152: "Голосовий режим працює без жодного ключа API, якщо встановлено faster-whisper (безкоштовне локальне розпізнавання мовлення)."
t153: "Доступно п'ять TTS-провайдерів: Edge TTS (безкоштовно), ElevenLabs, OpenAI, NeuTTS (безкоштовно, локально), MiniMax."
t154: "/voice on вмикає голосовий режим у CLI. Ctrl+B перемикає запис push-to-talk."
t155: "Потокове TTS озвучує речення в міру їх генерації — не потрібно чекати повної відповіді."
t156: "Голосові повідомлення в Telegram, Discord, WhatsApp і Slack транскрибуються автоматично."
t157: "Hermes працює на 21 платформі обміну повідомленнями: Telegram, Discord, Slack, WhatsApp, Signal, Matrix, IRC, Microsoft Teams, email та інших."
t158: "hermes gateway install налаштовує його як системну службу, що запускається під час завантаження."
t159: "DingTalk використовує Stream Mode — вебхуки чи публічний URL не потрібні."
t160: "BlueBubbles приносить iMessage у Hermes через локальний сервер на macOS."
t161: "Маршрути вебхуків підтримують перевірку HMAC, обмеження частоти запитів і фільтрацію подій."
t162: "API-сервер надає OpenAI-сумісний ендпоінт, який працює з Open WebUI та LibreChat."
t163: "Режим голосового каналу Discord: бот приєднується до голосового каналу, транскрибує мовлення та відповідає голосом."
t164: "group_sessions_per_user: true дає кожній людині власний сеанс у групових чатах."
t165: "/sethome позначає чат як домашній канал для доставки результатів cron-завдань."
t166: "Шлюз підтримує тайм-аути за бездіяльністю — активні агенти можуть працювати як завгодно довго."
t167: "Схвалення небезпечних команд має 4 рівні: один раз, сеанс, завжди (постійний список дозволених), відхилити."
t168: "Розумний режим схвалення використовує LLM, щоб автоматично схвалювати безпечні команди й позначати небезпечні."
t169: "Захист від SSRF блокує приватні мережі, loopback, link-local та адреси метаданих хмарних провайдерів."
t170: "ID сеансів починаються з мітки часу (20250305_091523_abcd), тож у ls і jq вони природно сортуються."
t171: "Підпроцеси MCP отримують відфільтроване середовище — передаються лише безпечні системні змінні."
t172: "Контекстні файли (.hermes.md, AGENTS.md) перед завантаженням скануються на ін'єкції промптів."
t173: "command_allowlist у config.yaml назавжди схвалює певні шаблони shell-команд."
t174: "Контекст автоматично стискається при досягненні порогу — пам'ять скидається на диск, а історія підсумовується."
t175: "Рядок стану стає жовтим, потім оранжевим, потім червоним у міру заповнення контексту."
t176: "SOUL.md — головний файл ідентичності агента; налаштуйте його, щоб сформувати поведінку."
t177: "Hermes завантажує контекст проєкту з .hermes.md, AGENTS.md, CLAUDE.md або .cursorrules (перший знайдений)."
t178: "Файли AGENTS.md у підкаталогах виявляються поступово, коли агент заходить у папки."
t179: "Контекстні файли обмежені 20 000 символами з розумним обрізанням посередині (початок і кінець зберігаються)."
t180: "Браузерні бекенди: локальний Chromium, Lightpanda, Browserbase, Browser Use і Firecrawl — плюс Camofox як плагін."
t181: "Camofox (Firefox із захистом від виявлення) тепер плагін: hermes plugins install camofox."
t182: "browser_exec виконує кілька кроків у браузері за один виклик Python — перехід, вилучення й кліки разом."
t183: "browser.dialog_policy визначає обробку нативних діалогів сторінки: must_respond (агент відповідає через browser_dialog), auto_dismiss або auto_accept."
t184: "hermes mcp відкриває інтерактивний вибір схвалених Nous MCP-серверів, які можна встановити одним натисканням."
t185: "hermes mcp catalog показує список схвалених Nous MCP-серверів, що постачаються з репозиторієм."
t186: "hermes mcp install <name> встановлює запис із каталогу, запитує облікові дані та дозволяє вибрати, які з його інструментів увімкнути."
t187: "MCP-сервери налаштовуються в config.yaml — підтримуються транспорти stdio та HTTP."
t188: "Фільтрація інструментів для кожного сервера: tools.include дозволяє, а tools.exclude забороняє конкретні інструменти."
t189: "MCP-сервери автоматично створюють набори інструментів під час роботи — hermes tools може перемикати їх для кожної платформи."
t190: "Підтримка OAuth для MCP: auth: oauth вмикає авторизацію через браузер із PKCE."
t191: "Контрольні точки не створюють жодних накладних витрат, якщо файли не змінюються — увімкнено за замовчуванням."
t192: "Знімок перед відкатом зберігається автоматично, тож ви можете скасувати саме скасування."
t193: "/rollback також скасовує хід розмови, тому агент не пам'ятає відкочених змін."
t194: "Контрольні точки використовують тіньові репозиторії в ~/.hermes/checkpoints/ — .git вашого проєкту ніколи не зачіпається."
t195: "batch_runner.py паралельно обробляє сотні запитів для генерації навчальних даних."
t196: "hermes chat -Q вмикає тихий режим для програмного використання — приховує банер і індикатор."
t197: "Збереження траєкторій (--save-trajectories) фіксує повні сліди використання інструментів для навчання моделей."
t198: "Три типи плагінів: загальні (інструменти та хуки), провайдери пам'яті та контекстні рушії."
t199: "hermes plugins install owner/repo встановлює плагіни безпосередньо з GitHub."
t200: "Зовнішні провайдери пам'яті: Honcho, Hindsight, Mem0, OpenViking та інші — через hermes plugins install."
t201: "Хуки плагінів включають pre/post_tool_call, pre/post_llm_call і transform_terminal_output для канонізації виводу."
t202: "Кешування промптів (Anthropic) знижує витрати, повторно використовуючи кешовані префікси системного промпту."
t203: "Агент генерує назви сеансів у фоновому потоці — без жодного впливу на затримку."
t204: "Розумна маршрутизація моделей може автоматично скеровувати прості запити до дешевшої моделі."
t205: "Slash-команди підтримують збіг за префіксом: /h розгортається в /help, /mod — у /model."
t206: "Перетягування шляху до файлу в термінал автоматично прикріплює зображення або надсилає його як контекст."
t207: ".worktreeinclude у корені репозиторію перелічує ігноровані git файли, які копіювати в робочі дерева."
t208: "hermes acp запускає Hermes як ACP-сервер для інтеграції з VS Code, Zed і JetBrains."
t209: "Власні провайдери: зберігайте іменовані ендпоінти в config.yaml у розділі custom_providers."
t210: "HERMES_EPHEMERAL_SYSTEM_PROMPT вставляє системний промпт, який ніколи не зберігається в історії."
t211: "credential_pool_strategies підтримує ротацію fill_first, round_robin, least_used і random."
t212: "hermes auth add nous або hermes auth add openai-codex налаштовує провайдерів на основі OAuth."
t213: "API-сервер підтримує як Chat Completions, так і Responses API зі станом на боці сервера."
t214: "tool_preview_length: 0 у конфігурації показує повні шляхи до файлів у стрічці активності індикатора."
t215: "hermes status --deep виконує глибші діагностичні перевірки всіх компонентів."
t216: "До cron-завдань можна прикріпити Python-скрипт (--script), чий stdout вставляється в запит як контекст."
t217: "Cron-скрипти зберігаються в ~/.hermes/scripts/ і виконуються перед агентом — ідеально для конвеєрів збору даних."
t218: "prefill_messages_file у config.yaml додає few-shot приклади до кожного виклику API, не зберігаючи їх в історії."
t219: "SOUL.md повністю замінює типову ідентичність агента — перепишіть його, щоб зробити Hermes своїм."
t220: "SOUL.md автоматично заповнюється типовою особистістю під час першого запуску. Відредагуйте його для налаштування."
t221: "/compress <focus topic> виділяє 60–70% бюджету підсумку на вашу тему й агресивно скорочує решту."
t222: "Під час другого й наступних стиснень компресор оновлює попередній підсумок, а не починає з нуля."
t223: "Перед скиданням сеансу шлюзу Hermes автоматично скидає важливі факти в пам'ять у фоновому режимі."
t224: "network.force_ipv4: true у config.yaml усуває зависання на серверах зі зламаним IPv6 — патчить socket під час роботи."
t225: "Інструмент terminal пояснює поширені коди виходу: grep повертає 1 = 'No matches found (not an error)'."
t226: "Невдалі команди терміналу у передньому плані автоматично повторюються до 3 разів з експоненційною затримкою (2с, 4с, 8с)."
t227: "Команди з голим sudo автоматично переписуються так, щоб передавати SUDO_PASSWORD з .env — інтерактивний запит не потрібен."
t228: "Помічники execute_code потребують явного імпорту: from hermes_tools import json_parse, shell_quote, retry."
t229: "7 інструментів пісочниці execute_code (web_search, terminal, read/write/search/patch) працюють через RPC — ніколи не потрапляють у контекст."
t230: "Читання тієї самої ділянки файлу 3+ рази викликає попередження. Після 4+ воно жорстко блокується, щоб запобігти циклам."
t231: "write_file і patch виявляють, чи файл був змінений зовні після останнього читання, і попереджають про застарілість."
t232: "Формат патчів V4A підтримує директиви Add File, Delete File і Move File — не лише Update."
t233: "MCP-сервери можуть запитувати відповіді LLM у зворотному напрямку через sampling — агент стає інструментом для сервера."
t234: "MCP-сервери надсилають notifications/tools/list_changed, щоб автоматично перереєструвати інструменти без перезапуску."
t235: "delegate_task з acp_command: 'claude' запускає Claude Code як дочірнього агента з будь-якої платформи."
t236: "Делегування має потік heartbeat — активність дочірнього агента передається батьківському, що запобігає тайм-аутам шлюзу."
t237: "Коли провайдер повертає HTTP 402 (payment required), допоміжний клієнт автоматично переходить до наступного."
t238: "agent.tool_use_enforcement скеровує моделі, які описують дії замість викликати інструменти — автоматично для GPT/Codex."
t239: "agent.restart_after_turn_timeout дає поточним ходам завершитися, перш ніж /restart перейде до stop(); restart_drain_timeout — лише бюджет примусового переривання після початку stop()."
t240: "agent.api_max_retries (за замовчуванням 3) визначає, скільки разів агент повторює невдалий виклик API, перш ніж показати помилку — зменште для швидкого перемикання."
t241: "Шлюз кешує екземпляри AIAgent для кожного сеансу — знищення цього кешу ламає кешування промптів Anthropic."
t242: "Будь-який сайт може публікувати навички через /.well-known/skills/index.json — хаб навичок знаходить їх автоматично."
t243: "Журнал аудиту навичок у ~/.hermes/skills/.hub/audit.log фіксує кожне встановлення та видалення."
t244: "Застарілі робочі дерева git прибираються автоматично: чисті злиті дерева видаляються; неактивні дерева з незафіксованими або невідправленими змінами спершу архівуються, і їх можна відновити командою hermes worktree restore."
t245: "Профілі ізолюють стан Hermes через HERMES_HOME; підпроцеси інструментів хоста зберігають ваш справжній HOME, якщо terminal.home_mode не дорівнює profile."
t246: "Змінна середовища HERMES_HOME_MODE (вісімкова, напр. 0701) задає власні права доступу до каталогу для обходу вебсервером."
t247: "Контейнерний режим: покладіть .container-mode у HERMES_HOME — і CLI хоста автоматично виконуватиметься всередині контейнера."
t248: "Ctrl+C має 5 рівнів пріоритету: скасувати запис → скасувати запити → закрити вибір → перервати агента → вийти."
t249: "Кожне переривання під час роботи агента записується в ~/.hermes/interrupt_debug.log з мітками часу."
t250: "BROWSER_CDP_URL підключає браузерні інструменти до будь-якого запущеного браузера сімейства Chromium — приймає WebSocket, HTTP або host:port."
t251: "BROWSERBASE_ADVANCED_STEALTH=true вмикає розширений захист від виявлення з кастомним Chromium (план Scale)."
t252: "CLI автоматично переходить у компактний режим у терміналах, вужчих за 80 стовпців."
t253: "Швидкі команди бувають двох типів: exec (виконати shell-команду напряму) та alias (перенаправити на іншу команду)."
t254: "Окрема модель для делегування: delegation.model і delegation.provider у конфігурації спрямовують субагентів на дешевші моделі."
t255: "delegation.reasoning_effort незалежно керує глибиною роздумів субагентів."
t256: "display.platforms у config.yaml дозволяє перевизначати параметри показу для кожної платформи: {telegram: {tool_progress: all}}."
t257: "human_delay.mode у конфігурації імітує швидкість людського набору — діапазон min_ms/max_ms налаштовується."
t258: "Міграції версій конфігурації виконуються автоматично під час завантаження — нові ключі з'являються без ручного втручання."
t259: "Моделі GPT і Codex отримують спеціальні вказівки в системному промпті щодо дисципліни інструментів та обов'язкового їх використання."
t260: "Моделі Gemini отримують окремі директиви щодо абсолютних шляхів, паралельних викликів інструментів і неінтерактивних команд."
t261: "context.engine у config.yaml можна встановити в назву плагіна для альтернативних стратегій керування контекстом."
t262: "З хмарним браузером адреси localhost і локальної мережі відкриваються в локальному Chromium (browser.auto_local_for_private_urls, увімкнено за замовчуванням)."
t263: "Стискач робить дешевий попередній прохід: виводи інструментів понад 200 символів замінюються заповнювачами ще до запуску LLM."
t264: "Якщо стиснення не вдалося, подальші спроби призупиняються на 10 хвилин, щоб не перевантажувати API."
t265: "Довгі небезпечні команди (>70 символів) отримують у запиті схвалення опцію 'view', щоб спершу переглянути повний текст."
t266: "Візуалізація рівня звуку показує стовпчики ▁▂▃▄▅▆▇ під час голосового запису на основі RMS-рівнів мікрофона."
t267: "Назви профілів не можуть збігатися з наявними бінарними файлами в PATH — 'hermes profile create ls' буде відхилено."
t268: "hermes profile create backup --clone-all копіює все (конфігурацію, ключі, SOUL.md, спогади, навички, сеанси)."
t269: "Клавішу голосового запису можна змінити через voice.record_key у config.yaml — не лише Ctrl+B."
t270: "Файли .cursorrules і .cursor/rules/*.mdc виявляються автоматично й завантажуються як контекст проєкту."
t271: "Контекстні файли перевіряються на 10+ шаблонів ін'єкції промптів — невидимий Unicode, 'ignore instructions', спроби ексфільтрації."
t272: "GPT-5 і Codex використовують у форматі повідомлень роль 'developer' замість 'system'."
t273: "Окремі допоміжні перевизначення для кожного завдання: auxiliary.vision.provider, auxiliary.compression.model тощо у config.yaml."
t274: "Допоміжний клієнт трактує 'main' як псевдонім провайдера — він розгортається у ваші справжні основні провайдера та модель."
t275: "hermes import-agent openclaw --dry-run показує попередній перегляд міграції з OpenClaw, нічого не записуючи."
t276: "Шляхи до файлів, вставлені з лапками або екранованими пробілами, обробляються автоматично — чистити вручну не потрібно."
t277: "Слеш-команди ніколи не спричиняють згортання великої вставки — /command з великими аргументами працює коректно."
t278: "У режимі переривання слеш-команди, введені під час роботи агента, оминають логіку переривання й виконуються негайно."
t279: "HERMES_DEV=1 вимикає виявлення контейнерного режиму для локальної розробки."
t280: "Кожен MCP-сервер отримує власний набір інструментів (mcp-servername), який можна вмикати й вимикати окремо через hermes tools."
t281: "Заповнювачі MCP ${ENV_VAR} у конфігурації розгортаються під час запуску сервера — зокрема змінні з ~/.hermes/.env."
t282: "Навички з довірених репозиторіїв (NousResearch) отримують рівень безпеки 'trusted'; навички спільноти проходять додаткове сканування."
t283: "Карантин навичок у ~/.hermes/skills/.hub/quarantine/ зберігає навички, що очікують перевірки безпеки."
t284: "/steer <prompt> вставляє нотатку після наступного виклику інструмента — скеруйте напрямок посеред завдання, не перериваючи його."
t285: "/goal <text> задає постійну ціль у стилі Ralph-циклу — Hermes автоматично продовжує хід за ходом, доки суддя не визнає її виконаною."
t286: "/snapshot create [label] зберігає повний знімок стану конфігурації Hermes; /snapshot restore <id> пізніше відкочує до нього."
t287: "/copy [N] копіює останню відповідь асистента в буфер обміну або N-ту з кінця, якщо вказати число."
t288: "/redraw примусово перемальовує весь інтерфейс, усуваючи зсуви термінала після зміни розміру в tmux або артефактів виділення мишею."
t289: "/agents (псевдонім /tasks) показує активних агентів і запущені фонові завдання в поточному сеансі."
t290: "/footer вмикає й вимикає нижній колонтитул шлюзу у фінальних відповідях із моделлю, % контексту та cwd."
t291: "/busy queue|steer|interrupt визначає, що робить натискання Enter, поки Hermes працює."
t292: "/topic у приватних чатах Telegram вмикає режим багатосеансових тем, керованих користувачем — /topic <id> відновлює минулі сеанси прямо там."
t293: "/approve session|always виконує очікувану небезпечну команду з вибраним вами обсягом довіри; /deny відхиляє її."
t294: "/restart плавно перезапускає шлюз, дочекавшись завершення активних запусків, а потім повідомляє того, хто його запросив, коли все знову працює."
t295: "/kanban boards switch <slug> змінює активну дошку Kanban серед кількох проєктів прямо з чату."
t296: "/reload перечитує ~/.hermes/.env у запущений сеанс — підхопіть нові API-ключі без перезапуску."
t297: "cronjob із no_agent=True запускає скрипт за розкладом і надсилає його stdout напряму — нуль токенів, нуль LLM."
t298: "Порожній stdout cron-скрипта означає тихий тік — нічого не доставляється, ідеально для сторожових перевірок порогів."
t299: "HERMES_CRON_MAX_PARALLEL (типово 4) обмежує кількість cron-завдань за один тік, щоб сплески не вичерпували ваші ключі."
t300: "Хуки шлюзу лежать у ~/.hermes/hooks/<name>/ з HOOK.yaml + handler.py — обробник має називатися `handle`."
t301: "Події хуків включають gateway:startup, session:start, agent:step і підписки за шаблоном command:*."
t302: "Покладіть чекліст у ~/.hermes/BOOT.md — і хук gateway:startup виконуватиме його як одноразового агента під час кожного завантаження."
t303: "hermes curator run --dry-run показує, що куратор архівував би чи об'єднав, нічого не змінюючи."
t304: "hermes curator pin <skill> жорстко захищає навичку і від автоархівації, і від інструмента skill_manage агента."
t305: "hermes curator rollback відновлює навички зі знімка, зробленого перед запуском — резервні копії лежать у skills/.curator_backups/."
t306: "hermes auth reset <provider> [target] скидає паузи та позначки вичерпання для всього пулу облікових даних або для одного запису за індексом, id чи міткою."
t307: "credential_pool_strategies.<provider>: round_robin рівномірно чергує ключі замість типового fill_first."
t308: "use_gateway: true для окремого інструмента спрямовує web, image, tts або browser через вашу підписку Nous — без додаткових ключів."
t309: "provider_routing.data_collection: deny виключає провайдерів OpenRouter, які зберігають дані."
t310: "provider_routing.require_parameters: true маршрутизує лише до провайдерів, що підтримують кожен параметр вашого запиту."
t311: "HERMES_TUI_RESUME=1 автоматично повертає вас до останнього сеансу TUI під час запуску — зручно після обриву SSH."
t312: "HERMES_TUI_THEME=light|dark|<hex> примусово задає тему TUI в терміналах, які не встановлюють COLORFGBG."
t313: "Ctrl+G або Ctrl+X Ctrl+E у TUI відкриває буфер введення в $EDITOR для довгих багаторядкових запитів."
t314: "TUI відображає LaTeX прямо в тексті — $E=mc^2$ стає математичним Unicode замість сирого TeX."
t315: "hermes dashboard запускає локальний вебінтерфейс на 127.0.0.1:9119 — жодні дані не залишають localhost."
t316: "hermes dashboard вбудовує повний TUI Hermes у ваш браузер через xterm.js і WebSocket PTY."
t317: "Покладіть YAML із двома кольорами палітри в ~/.hermes/dashboard-themes/, щоб повністю змінити вигляд панелі керування."
t318: "Плагіни панелі керування підключаються простим копіюванням: manifest.json + JS-бандл у ~/.hermes/dashboard-plugins/ — збірка npm не потрібна."
t319: "layoutVariant: cockpit у темі панелі керування додає ліву панель шириною 260px, яку плагіни можуть заповнювати через слот sidebar."
t320: "display.tool_progress_command: true відкриває /verbose на платформах обміну повідомленнями; типово він доступний лише в CLI."
t321: "HERMES_BACKGROUND_NOTIFICATIONS=result сповіщає лише про завершення фонових завдань (на відміну від concise/all/error/off)."
t322: "HERMES_WRITE_SAFE_ROOT обмежує write_file/patch префіксами каталогів; кілька шляхів розділяються через os.pathsep (: або ;)."
t323: "HERMES_IGNORE_RULES пропускає автоматичне підключення AGENTS.md, SOUL.md, .cursorrules, пам'яті та попередньо завантажених навичок."
t324: "HERMES_ACCEPT_HOOKS автоматично схвалює ще не бачені shell-хуки, оголошені в config.yaml, без запиту в TTY."
t325: "auxiliary.goal_judge.model спрямовує суддю /goal на дешеву швидку модель, щоб вартість циклу була майже нульовою."
t326: "Контрольні точки пропускають каталоги з понад 50 000 файлів, щоб уникнути повільних операцій git на величезних монорепозиторіях."
t327: "tts.provider: piper запускає локальний TTS на CPU для 44 мов — голоси автоматично завантажуються в ~/.hermes/cache/piper-voices/."
t328: "tts.providers.<name>.type: command підключає будь-який TTS-рушій із CLI через заповнювачі {input_path} і {output_path}."
t329: "API_SERVER_ENABLED=true запускає поруч зі шлюзом OpenAI-сумісний ендпоінт для Open WebUI та LibreChat."
t330: "GATEWAY_PROXY_URL вмикає розділену схему: введення/виведення платформ локально, робота агента делегується віддаленому API-серверу."
t331: "MATRIX_DEVICE_ID закріплює стабільний ID пристрою для E2EE — без нього ключі змінюються під час кожного запуску, і розшифрування історії ламається."
t332: "TELEGRAM_WEBHOOK_SECRET обов'язковий щоразу, коли задано TELEGRAM_WEBHOOK_URL — згенеруйте його через openssl rand -hex 32."
t333: "batch_runner.py --resume зіставляє виконані запити за текстом, тож перестановки в наборі даних не запускають готову роботу повторно."
t334: "/new починає новий сеанс на місці (псевдонім /reset) — новий ID сеансу, чиста історія, CLI залишається відкритим."
t335: "/clear очищає екран термінала І починає новий сеанс — одна команда для візуального скидання."
t336: "/history виводить поточну розмову прямо в CLI, не виходячи з нього — зручно, щоб швидко перечитати."
t337: "/save записує поточну розмову на диск, не завершуючи сеанс."
t338: "/status показує зведення про сеанс: ID, назву, модель, використання токенів і час, що минув."
t339: "/image <path> прикріплює локальний файл зображення до вашого наступного запиту без вставляння чи перетягування."
t340: "/platforms показує стан підключення шлюзу та платформ обміну повідомленнями прямо з чату."
t341: "/commands виводить посторінково повний список слеш-команд і встановлених навичок — зручно на платформах без автодоповнення по Tab."
t342: "/toolsets перелічує всі доступні набори інструментів, щоб ви знали, що приймає -t/--toolsets."
t343: "/voice tts вмикає режим лише TTS — агент відповідає вголос, а ви й далі вводите запити з клавіатури."
t344: "/reload-skills повторно сканує ~/.hermes/skills/, тож скопійовані туди навички з'являються без перезапуску сеансу."
t345: "/indicator kaomoji|emoji|unicode|ascii обирає стиль індикатора зайнятості TUI, який показується під час роботи агента."
t346: "/debug завантажує пакет для підтримки (інформація про систему + журнали) і повертає посилання для поширення — працює і в чаті."
t347: "hermes -z \"<prompt>\" — найчистіший одноразовий запуск: лише фінальна відповідь у stdout і нічого більше — ідеально для конвеєрів у скриптах."
t348: "hermes chat --pass-session-id вставляє ID сеансу в системний промпт, щоб агент міг на нього посилатися."
t349: "hermes chat --image path/to/pic.png прикріплює локальне зображення до одного запиту -q без окремого кроку завантаження."
t350: "hermes chat --ignore-user-config пропускає активну конфігурацію користувача — для відтворюваних звітів про помилки та запусків у CI."
t351: "hermes chat --source tool позначає програмні чати, щоб вони не захаращували hermes sessions list."
t352: "hermes dump --show-keys додає знеособлені відбитки API-ключів для глибшого налагодження з підтримкою."
t353: "hermes sessions rename <ID> \"new title\" перейменовує будь-який минулий сеанс; hermes sessions delete <ID> видаляє один."
t354: "hermes import відновлює повну резервну копію Hermes із zip; експорти сеансів у JSON/JSONL імпортуються зі сторінки Sessions панелі керування."
t355: "hermes fallback інтерактивно керує ланцюжком fallback_model — без ручного редагування config.yaml."
t356: "hermes pairing змінює токен зв'язування для приватних повідомлень — перший, хто напише після зміни, отримує доступ до бота."
t357: "hermes setup проводить нових користувачів через налаштування провайдера, ключів і платформ в одному інтерактивному сценарії."
t358: "hermes status --deep виконує повну перевірку стану всіх компонентів; звичайний hermes status — швидкий огляд."
t359: "HERMES_AGENT_TIMEOUT=0 вимикає зупинку запущеного агента шлюзом через бездіяльність — для довгих дослідницьких запусків."
t360: "HERMES_ENABLE_PROJECT_PLUGINS=1 автоматично завантажує локальні плагіни репозиторію з ./.hermes/plugins/ — з обов'язковою перевіркою довіри."
t361: "HERMES_DISABLE_FILE_STATE_GUARD=1 вимикає захист «файл змінився після прочитання» для patch і write_file."
t362: "HERMES_ALLOW_PRIVATE_URLS=true дозволяє вебінструментам звертатися до localhost і приватних мереж — у режимі шлюзу типово вимкнено."
t363: "HERMES_OPTIONAL_SKILLS=name1,name2 автоматично встановлює додаткові навички з необов'язкового каталогу під час першого запуску кожного профілю."
t364: "HERMES_BUNDLED_SKILLS вказує на власне дерево вбудованих навичок — використовується пакуванням Homebrew і Nix."
t365: "HERMES_DUMP_REQUEST_STDOUT=1 виводить корисне навантаження кожного API-запиту в stdout замість файлів журналу."
t366: "HERMES_OAUTH_TRACE=1 записує в журнал (зі знеособленням) обмін OAuth-токенами та спроби оновлення — для налагодження автентифікації провайдера."
t367: "HERMES_STREAM_RETRIES (типово 3) задає кількість спроб перепідключення посеред потоку при тимчасових мережевих помилках."
t368: "HERMES_GATEWAY_BUSY_ACK_ENABLED=false вимикає підтвердження ⚡/⏳/⏩, коли користувач пише зайнятому агентові."
t369: "HERMES_AGENT_NOTIFY_INTERVAL (типово 180s) задає, як часто шлюз повідомляє про прогрес під час довгих ходів."
t370: "HERMES_RESTART_DRAIN_TIMEOUT (типово 900s) обмежує, скільки /restart чекає на завершення поточних запусків, перш ніж примусово перезапуститися."
t371: "HERMES_CHECKPOINT_TIMEOUT (типово 30s) обмежує час створення контрольної точки файлової системи — збільште його на величезних монорепозиторіях."
t372: "image_gen.model у config.yaml обирає модель FAL: flux-2/klein, gpt-image-2, nano-banana-pro та інші."
t373: "image_gen.provider спрямовує генерацію зображень через плагін (OpenAI Images, Codex, FAL) замість типового провайдера."
t374: "AUXILIARY_VISION_BASE_URL + AUXILIARY_VISION_API_KEY спрямовують аналіз зображень на будь-який OpenAI-сумісний ендпоінт."
t375: "API_SERVER_MODEL_NAME задає назву моделі в /v1/models — необхідно для багатопрофільних конфігурацій Open WebUI."
t376: "Плагіни панелі керування роздаються з /dashboard-plugins/<name>/ — просто покладіть файли в ~/.hermes/dashboard-plugins/."
t377: "Чати з --source tool типово не показуються в hermes sessions list — вкажіть --source явно, щоб їх побачити."
placeholder:
p01: "Запитайте будь-що або введіть / для команд…"
p02: "Підсумуй, що є в цій теці"
p03: "Склади відповідь на останній лист у моїй скриньці"
p04: "Сплануй функцію, а потім реалізуй її крок за кроком"
p05: "Знайди та виправ тест, що не проходить"
p06: "Дослідь цю тему й напиши мені короткий огляд"
p07: "Що нещодавно змінилося в цьому репозиторії?"
p08: "Перетвори ці нотатки на список справ"
p09: "Поясни цю помилку і як її виправити"
p10: "Постав нагадування або заплануй повторюване завдання"
p11: "Введіть /, щоб переглянути команди, або Ctrl+P для палітри"
# Window plans (Nous subscription with included usage): picker words, limit lines, Large-model notice.
plan_usage:
level_free: "Безкоштовно"
level_top_tier: "Велика"
resets_in: "скидання через {duration}"
resets_soon: "скоро скидання"
limit_reached: "Досягнуто {name} · {resets}"
limit_day: "денний ліміт"
limit_week: "тижневий ліміт"
limit_month: "місячний ліміт"
limit_top_tier: "місячний ліміт великих моделей"
then_credits: "платні моделі тепер використовують ваші кредити (оплата за використання)"
then_credits_large: "великі моделі тепер використовують ваші кредити (оплата за використання)"
then_wait: "до скидання лише безкоштовні моделі"
then_wait_large: "великі моделі призупинено до скидання"
large_notice: "Велика модель: витрачає більше ліміту плану на повідомлення."
large_notice_credits: "Велика модель: витрачає більше кредитів на повідомлення (оплата за використання)."
large_notice_limit: "Велика модель: досягнуто {name} ({resets})."
large_notice_limit_stops: "Велика модель: досягнуто {name} ({resets}), до скидання вона не запуститься."
large_notice_percent: "Велика модель: витрачає більше ліміту плану на повідомлення. Місячний ліміт великих моделей: використано {percent}."