Контекстные ссылки
Введите @, а затем ссылку, чтобы вставить содержимое прямо в ваше сообщение. VibeOS разворачивает ссылку в строке и добавляет содержимое под разделом --- 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 - Окружение VibeOS:
$VIBEOS_HOME/.env
Эти директории полностью заблокированы (любой файл внутри):
~/.ssh/,~/.aws/,~/.gnupg/,~/.kube/,$VIBEOS_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
Обработка ошибок
Некорректные ссылки вызывают встроенные предупреждения, а не сбои:
| Условие | Поведение |
|---|---|
| Файл не найден | Предупреждение: «файл не найден» |
| Бинарный файл | Предупреждение: «бинарные файлы не поддерживаются» |
| Папка не найдена | Предупреждение: «папка не найдена» |
| Ошибка выполнения git | Предупреждение с stderr от git |
| URL не возвращает содержимое | Предупреждение: «содержимое не извлечено» |
| Конфиденциальный путь | Предупреждение: «путь является конфиденциальным файлом учётных данных» |
| Путь вне рабочей области | Предупреждение: «путь находится за пределами разрешённой рабочей области» |