Интеграция CLI, MCP и A2A
Подключение внешнего Agent к разрешённым локальным операциям и отслеживание задач.
ОбновленоНа этой странице
Локальные агенты Codex и WorkBuddy используют OpenFiles через MCP или CLI + Skill. Эти интерфейсы разделяют файловые возможности и задачи с A2A. Для обычной работы достаточно установки CLI и команды setup. A2A предназначен для собственных клиентов: /a2a не является адресом MCP, а вызывающий процесс должен работать на том же компьютере, что и OpenFiles.
Установка CLI
Нужны Node.js 22 или новее и настольная сборка с resources/agent. CLI поставляется с приложением; установите его один раз из локального каталога. Для стандартной установки macOS:
npm install -g "/Applications/OpenFiles.app/Contents/Resources/agent"
В Windows используйте PowerShell и замените пример на каталог resources\agent вашей установки:
npm install -g "C:\path\to\OpenFiles\resources\agent"
При разработке из исходников выполните в репозитории npm run build, затем npm install -g ./dist/agent. После этого доступна команда openfiles без полного пути к скрипту.
Подключение Codex
Команда запускает OpenFiles или подключается к нему, регистрирует MCP через CLI Codex и устанавливает Skill в ~/.agents/skills/openfiles. Команда codex должна быть доступна. Затем перезапустите Codex для загрузки настроек.
openfiles setup codex
Подключение WorkBuddy
Команда запускает OpenFiles или подключается к нему и добавляет сервер в ~/.workbuddy/mcp.json, сохраняя другие серверы и резервную копию прежних настроек. Перезапустите WorkBuddy. Для CLI + Skill можно также импортировать указанный ZIP skillArchive через загрузку навыков. MCP уже готов к работе.
openfiles setup workbuddy
Первый setup создаёт и разрешает ~/OpenFilesAgent; результаты сохраняются в подпапке output. Поместите туда файлы и попросите агента, например, экспортировать CDR через OpenFiles в ZIP всех страниц SVG, дождаться завершения и сообщить путь. --workspace DIR выбирает существующий каталог, --output DIR — каталог результатов. --dry-run только показывает пути настройки.
Разрешения и путь приложения сохраняются в ~/.openfiles/agent/setup.json. Последующие вызовы CLI, MCP и установленного Skill запускают приложение с этими настройками и автоматически читают текущие адрес и token. Фиксированные порт и token в клиенте не нужны. Чтобы изменить разрешения работающего шлюза, завершите OpenFiles и повторите setup; задачи принудительно не прерываются.
Официальные руководства: Codex MCP · WorkBuddy MCP
Проверка подключения и устранение проблем
doctor проверяет связь без запуска приложения; capabilities запускает настроенное приложение. schema описывает аргументы офлайн. Индикатор MCP подтверждает лишь запуск адаптера: вызовите capabilities для проверки файловой службы.
openfiles doctor
openfiles capabilities
openfiles schema openfiles_convert
Если приложение не найдено, укажите исполняемый файл через setup codex --app /absolute/path/to/OpenFiles, заменив имя клиента для WorkBuddy. После перемещения Node.js или приложения переустановите CLI и повторите setup. При ошибках каталога проверьте readRoots / outputRoots. Перед повторной отправкой записи с неизвестным результатом используйте tasks.
Ручной запуск шлюза (необязательно)
Используйте сборку с resources/agent/openfiles.cjs (в macOS — внутри OpenFiles.app/Contents/Resources) и Node.js 22 или новее для клиента. Запустите OpenFiles с --agent-read-root=/absolute/input --agent-output-root=/absolute/output. Оба каталога должны существовать; для нескольких разрешений повторите флаги. По умолчанию шлюз выключен. Для изменения разрешений завершите приложение и запустите снова. В исходном репозитории доступны команды:
npm run build-electron
npm run agent -- capabilities
npm run agent -- mcp-config
npm run agent -- skill
Обнаружение и запуск операций
Сначала прочитайте capabilities: conversionFormats перечисляет пары преобразования, metadata.formats — редактируемые поля. openfiles_inspect возвращает варианты экспорта файла. HTML, Markdown и SVG преобразуются в PNG/PDF без скриптов и внешних ресурсов. CDR экспортируется в ZIP со всеми страницами SVG. openfiles_workflow запускает сохранённые .ofw; sourcePaths заменяет файловые входы, а пакетные папки и маски также требуют разрешения. PDF/OFD используют metadata.edit или metadata.remove. Узлам ИИ нужна установленная среда; они могут скачивать модели. Сохраните это как request.json, заменив пути:
JPEG и радиометрический JPEG имеют общие расширения. При contentDetectionRequired форматы являются кандидатами; содержимое проверяется при выполнении.
{"sourcePaths":["/input/design.cdr"],"outputDir":"/output","format":"zip"}
node dist/agent/openfiles.cjs call openfiles_convert --input request.json --wait
Отслеживание и восстановление задач
Запись сохраняет оригиналы и создаёт каталог openfiles-* внутри outputDir. Опрашивайте до completed, failed или canceled, затем проверяйте result.paths и ошибки файлов. --wait ждёт 300 секунд по умолчанию; срок меняется через --timeout. После тайм-аута задача продолжается. Перед повторной отправкой найдите ID через tasks. Список принимает --json или --input с state, contextId, pageSize, pageToken; результаты запрашиваются у отдельной задачи. Хранятся до 100 задач, одновременно выполняются восемь. Перезапуск удаляет историю; отмена сохраняет готовые результаты.
node dist/agent/openfiles.cjs tasks
node dist/agent/openfiles.cjs task TASK_ID --wait
node dist/agent/openfiles.cjs cancel TASK_ID
Подключение MCP и установка Skill
mcp-config только печатает конфигурацию. Добавьте команду и аргументы во внешний клиент. mcp использует построчный JSON-RPC через stdio; skill выводит встроенную инструкцию. Дескриптор: ~/.openfiles/agent/connection.json. Свой путь задаётся через --agent-connection=PATH в приложении и --connection PATH в клиенте. Не публикуйте bearer token. При необходимости замените dist/agent/openfiles.cjs на путь установленного клиента. Исходящие MCP-серверы чата настраиваются отдельно.
Вызов A2A
Возьмите loopback URL из дескриптора и запросите /.well-known/agent-card.json. securityRequirements объявляет bearer-аутентификацию. Отправьте JSON ниже методом POST в /a2a с Content-Type: application/json, A2A-Version: 1.0, Authorization: Bearer <token>. При повторной попытке передачи используйте тот же ID и сообщение. Вызывайте GetTask с { "id": "TASK_ID" } или CancelTask. ListTasks поддерживает contextId, status, statusTimestampAfter, страницы и includeArtifacts. Потоковая передача, push-уведомления и планирование на естественном языке недоступны. Пути относятся к этому компьютеру; редактирование снимков и установка плагинов остаются действиями интерфейса.
{
"jsonrpc": "2.0",
"id": 1,
"method": "SendMessage",
"params": {
"message": {
"messageId": "unique-request-id",
"role": "ROLE_USER",
"parts": [{"data": {"name": "openfiles_capabilities", "arguments": {}}}]
},
"configuration": {"returnImmediately": true}
}
}
Шаг непонятен или отличается от приложения? Сообщите нам.