Контекстные ссылки
Введите @ с последующей ссылкой, чтобы вставить содержимое прямо в ваше сообщение. 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 |
Загрузить и вставить содержимое веб-страницы |
Примеры использования
Review @file:src/main.py and suggest improvements
What changed? @diff
Compare @file:old_config.yaml and @file:new_config.yaml
What's in @folder:src/components?
Summarize this article @url:https://arxiv.org/abs/2301.00001
Несколько ссылок работают в одном сообщении:
Check @file:main.py, and also @file:test.py.
Знаки пунктуации в конце (,, ., ;, !, ?) автоматически удаляются из значений ссылок.
Автодополнение в CLI
В интерактивном CLI при вводе @ срабатывает автодополнение:
-
@показывает все типы ссылок (@diff,@staged,@file:,@folder:,@git:,@url:) -
@file:и@folder:запускают автодополнение путей файловой системы с метаданными о размере файлов -
Просто
@с последующим частичным текстом показывает подходящие файлы и папки из текущего каталога
Диапазоны строк
Ссылка @file: поддерживает диапазоны строк для точной вставки содержимого:
@file:src/main.py:42 # Single line 42
@file:src/main.py:10-25 # Lines 10 through 25 (inclusive)
Нумерация строк начинается с 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), чтобы вставлять только нужные участки
Типовые сценарии
# Code review workflow
Review @diff and check for security issues
# Debug with context
This test is failing. Here's the test @file:tests/test_auth.py
and the implementation @file:src/auth.py:50-80
# Project exploration
What does this project do? @folder:src @file:README.md
# Research
Compare the approaches in @url:https://arxiv.org/abs/2301.00001
and @url:https://arxiv.org/abs/2301.00002
Обработка ошибок
Некорректные ссылки выводят встроенные предупреждения, а не ошибки:
| Условие | Поведение |
|---|---|
| Файл не найден | Предупреждение: "file not found" |
| Бинарный файл | Предупреждение: "binary files are not supported" |
| Папка не найдена | Предупреждение: "folder not found" |
| Ошибка выполнения Git | Предупреждение с stderr Git |
| URL не вернул содержимое | Предупреждение: "no content extracted" |
| Чувствительный путь | Предупреждение: "path is a sensitive credential file" |
| Путь вне рабочей области | Предупреждение: "path is outside the allowed workspace" |