Контекстные ссылки
Введите @, за которым следует ссылка, чтобы внедрить критерий непосредственно в ваше сообщение. Гермес разворачивает ссылку встроенно и добавляет традиции под разделом --- Прикрепленный контекст ---.
Поддерживаемые ссылки
| Синтаксис | Описание |
|---|---|
@file:path/to/file.py |
Внедрить ограничения файла |
@file:path/to/file.py:10-25 |
Внедрить конкретный диапазон строк (с 1, включительно) |
@folder:путь/к/каталогу |
Внедрить деревянные каталоги с метаданными файлами |
@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. Они работают в интерактивном интерфейсе командной строки, где @ запускает автодополнение, а ссылки разворачиваются перед отправкой сообщения агенту.
На платформах обмена сообщениями (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
Обработка ошибок
Неверные ссылки украшены встроенными рефлекторами, а не ошибка:
| Условие | Поведение |
|---|---|
| Файл не найден | Предупреждение: «файл не найден» |
| Бинарный файл | Предупреждение: «Двоичные файлы не поддерживаются» |
| Папка не найдена | Предупреждение: «папка не найдена» |
| Ошибка git | Предупреждение с помощью stderr git |
| URL-адрес не восстановлен | Предупреждение: «Содержимое не извлечено» |
| Конфиденциальный путь | Предупреждение: «путь — это конфиденциальный файл учетных данных» |
| Путь вне рабочих помещений | Предупреждение: «путь находится за пределами разрешенной рабочей области» |