Перейти к содержанию

References

На этой странице

Введите @, а затем ссылку, чтобы вставить содержимое прямо в ваше сообщение. Hermes разворачивает ссылку в строку и добавляет содержимое под разделом --- Attached Context ---.

Поддерживаемые ссылки

Синтаксис Описание
@file:path/to/file.py Вставить содержимое файла
@file:path/to/file.py:10-25 Вставить конкретный диапазон строк (нумерация с 1, включительно)
@folder:path/to/dir Вставить дерево каталога с метаданными файлов
@diff Вставить git diff (неиндексированные изменения рабочей копии)
@staged Вставить git diff --staged (индексированные изменения)
@git:5 Вставить последние N коммитов с патчами (макс. 10)
@url:https://example.com Загрузить и вставить содержимое веб-страницы

Примеры использования

    Проверь @file:src/main.py и предложи улучшения

    Что изменилось? @diff

    Сравни @file:old_config.yaml и @file:new_config.yaml

    Что в @folder:src/components?

    Кратко перескажи эту статью @url:https://arxiv.org/abs/2301.00001

В одном сообщении можно использовать несколько ссылок:

    Проверь @file:main.py, а также @file:test.py.

Знаки препинания в конце (,, ., ;, !, ?) автоматически отсекаются от значений ссылок.

Автодополнение в CLI

В интерактивном CLI ввод @ запускает автодополнение:

  • @ показывает все типы ссылок (@diff, @staged, @file:, @folder:, @git:, @url:)
  • @file: и @folder: запускают автодополнение путей файловой системы с метаданными размера файлов
  • Обычный @ с последующим частичным текстом показывает совпадающие файлы и папки из текущей директории

Диапазоны строк

Ссылка @file: поддерживает диапазоны строк для точной вставки содержимого:

    @file:src/main.py:42        # Одна строка 42
    @file:src/main.py:10-25     # Строки с 10 по 25 (включительно)

Строки нумеруются с 1. Некорректные диапазоны игнорируются (возвращается полный файл).

Ограничения по размеру

Контекстные ссылки ограничены, чтобы не перегружать контекстное окно модели:

Порог Значение Поведение
Мягкий лимит 25% длины контекста Добавляется предупреждение, вставка продолжается
Жёсткий лимит 50% длины контекста Вставка отклоняется, исходное сообщение возвращается без изменений
Записи в папке макс. 200 файлов Лишние записи заменяются на - ...
Git-коммиты макс. 10 @git:N ограничивается диапазоном [1, 10]

Безопасность

Блокировка конфиденциальных путей

Следующие пути всегда блокируются в ссылках @file: для предотвращения утечки учётных данных:

  • SSH-ключи и конфигурация: ~/.ssh/id_rsa, ~/.ssh/id_ed25519, ~/.ssh/authorized_keys, ~/.ssh/config
  • Профили оболочки: ~/.bashrc, ~/.zshrc, ~/.profile, ~/.bash_profile, ~/.zprofile
  • Файлы с учётными данными: ~/.netrc, ~/.pgpass, ~/.npmrc, ~/.pypirc
  • Окружение Hermes: $HERMES_HOME/.env

Полностью блокируются следующие директории (любой файл внутри):

  • ~/.ssh/, ~/.aws/, ~/.gnupg/, ~/.kube/, $HERMES_HOME/skills/.hub/

Защита от обхода путей

Все пути разрешаются относительно рабочей директории. Ссылки, ведущие за пределы разрешённого корня рабочей области, отклоняются.

Определение бинарных файлов

Бинарные файлы определяются по MIME-типу и проверке на нулевые байты. Известные текстовые расширения (.py, .md, .json, .yaml, .toml, .js, .ts и т.д.) обходят MIME-проверку. Бинарные файлы отклоняются с предупреждением.

Доступность на платформах

Контекстные ссылки — это в первую очередь функция CLI. Они работают в интерактивном CLI, где @ запускает автодополнение по табуляции, а ссылки разворачиваются до отправки сообщения агенту.

В мессенджер-платформах (Telegram, Discord и т.д.) синтаксис @ не разворачивается шлюзом — сообщения передаются как есть. Сам агент всё ещё может ссылаться на файлы через инструменты read_file, search_files и web_extract.

Взаимодействие со сжатием контекста

Когда контекст разговора сжимается, развёрнутое содержимое ссылки включается в сводку сжатия. Это означает:

  • Большое содержимое файлов, вставленное через @file:, увеличивает использование контекста
  • Если разговор позже будет сжат, содержимое файла будет суммировано (а не сохранено дословно)
  • Для очень больших файлов используйте диапазоны строк (@file:main.py:100-200), чтобы вставлять только нужные фрагменты

Типовые сценарии

    # Обзор кода
    Проверь @diff на предмет проблем с безопасностью

    # Отладка с контекстом
    Этот тест падает. Вот тест @file:tests/test_auth.py
    и реализация @file:src/auth.py:50-80

    # Исследование проекта
    Что делает этот проект? @folder:src @file:README.md

    # Исследование
    Сравни подходы в @url:https://arxiv.org/abs/2301.00001
    и @url:https://arxiv.org/abs/2301.00002

Обработка ошибок

Некорректные ссылки выводят встроенные предупреждения, а не вызывают сбой:

Ситуация Поведение
Файл не найден Предупреждение: «file not found»
Бинарный файл Предупреждение: «binary files are not supported»
Папка не найдена Предупреждение: «folder not found»
Ошибка Git-команды Предупреждение с git stderr
URL не вернул содержимое Предупреждение: «no content extracted»
Конфиденциальный путь Предупреждение: «path is a sensitive credential file»
Путь вне рабочей области Предупреждение: «path is outside the allowed workspace»