harnsy

harnsy MaxС версии 0.9.0

Главная машина может быть за NAT. Никто не открывает порт.

Доступно с версии harnsy 0.9.0; размещённый релей будет в бете.

Ноутбук, домашний компьютер или сервер за NAT может быть главной машиной вашего кластера. Главная машина и каждый участник, который подключается через релей, сами соединяются с ним, а релей только передаёт байты между ними. Участнику за NAT релей не нужен: он присоединяется к доступной главной машине напрямую.

TLS между вашими машинами

Мастерkestrelbill-officeнет открытого порта
соединяется наружу
Релейпересылает байты · видит, кто, когда и сколько
соединяется наружу
Участникhome-laptopнет открытого порта
Машина за NAT входит в кластер через релей. Пример данных.

Обе стороны соединяются наружу.

Главная машина и участник сами открывают соединение к релею. Ни один порт не пробрасывается, и публичный адрес не нужен ни одной из машин.

Релей только пересылает байты.

Он соединяет поток участника с потоком, который главная машина открывает для него, и дальше копирует байты в обе стороны. Он их не читает, не разбирает и не хранит.

TLS идёт между вашими машинами.

Внутри потока кластер использует собственный TLS насквозь. Участник проверяет сертификат главной машины по пину в своём токене присоединения, поэтому релей не может выдать себя за главную машину. Присоединение через релей без пина отклоняется.

Что видит релей, точно.

Кто (хеш идентификатора главной машины на релее; на нашем релее ещё и хеш идентификатора лицензии), когда и сколько трафика. Оборвать соединение он может; читать и менять то, что внутри, не может. В его журнале одна строка на поток: хешированные идентификаторы, адрес клиента, обрезанный до сети (/24 для IPv4, /48 для IPv6), байты туда и обратно, сколько длился поток и почему закончился. Ни имён, ни сообщений, ни токенов.

Коротко.

На главной машине: сделайте её мастером, включите релей, перезапустите harnsy и выпустите строку присоединения. На другой машине: вставьте строку. Каждый шаг и что вы увидите — в руководстве.

Прямые участники и через релей — вместе.

У одной главной машины могут быть одновременно участники в её сети и участники через релей.

У нас (бета).

harnsy Max

Наш размещённый релей — в бете, он входит в harnsy Max: главная машина каждый день получает от лицензионного сервиса билет — разрешение пользоваться им. Собственный релей со своим ключом запланирован; пока его нет.

Когда нужен релей

  • Главная машина у вас дома

    Это ноутбук или Mac за домашним роутером, без публичного адреса. Ваши серверы и другие машины подключаются к нему через релей, порт вы не открываете, а адрес для участников не меняется, когда ноутбук переезжает в другую сеть.

    Релей видит: какая машина (по хешу), когда и сколько. Сообщения, токены и ключи — нет.

    Шаги для этого случая →

  • Коллега подключается со своим входом

    Их машина подключается к вашей главной через релей со своим входом в Claude, Codex или OpenCode. Вход остаётся на их машине, а ключ harnsy Max у них свой или они берут место у вашей главной машины.

    Главная машина видит: имена агентов, харнес, статус, папку и сообщения. Входы и ключи — нет.

    Шаги для этого случая →

  • Сервер без публичного адреса

    Если сам сервер — главная машина и до него не дотянуться, участники подключаются через релей. Никто не пробрасывает порт и не поднимает VPN.

    Серверу, который только участник, релей не нужен: он присоединяется к доступной главной машине напрямую.

    Шаги для этого случая →

  • Часть участников в вашей сети, часть нет

    Одна главная машина обслуживает тех и других: участники из вашей сети подключаются напрямую, остальные через релей.

    В строке каждого участника в «Узлах» указан путь: «через посредника …» или «напрямую, порт 7789».

    Шаги для этого случая →

Шаг за шагом: кластер через релей

Выберите свой случай. В каждом — шаги, что вы увидите после них и как всё отменить. Где в дашборде есть кнопка, она идёт первой, а строка для терминала — запасной путь. Релей нужен главной машине, до которой другие не могут дотянуться, например домашней, за NAT. Участнику за NAT релей не нужен.

Главная — моя домашняя машина

Главная машина — ноутбук или Mac дома, или любая машина без публичного адреса. Ваш сервер и другие машины подключаются к ней через релей.

  1. Сделайте её главной.

    На машине, которая станет главной, один раз выполните это в терминале; кнопки в дашборде для этого нет. home — имя, которое вы выбираете сами. Начните с этого: команда релея ниже работает только на главной машине.

    harnsy debug cluster init home --master
  2. Включите релей.

    Машине нужен ключ harnsy Max (страница «Лицензия»). Команда использует наш размещённый релей, он в бете.

    harnsy debug cluster relay on
  3. Перезапустите harnsy на этой машине.

    Работающая главная машина читает настройку релея только при запуске. Перезапустите harnsy, чтобы она вступила в силу. Linux: systemctl --user restart harnsy.service. macOS: launchctl kickstart -k gui/$(id -u)/com.github.butschster.harnsy. Windows: schtasks /End /TN harnsy, затем schtasks /Run /TN harnsy.

  4. Выпустите строку присоединения для другой машины.

    В дашборде откройте «Узлы» и выберите «Добавить в кластер». Выберите «Узел», назовите машину (например server), задайте права и оставьте «Адрес мастера» пустым, чтобы строка несла адрес релея. Нажмите «Выпустить токен». «manage» — это доступ к shell главной машины: давайте его только своей машине.

    harnsy debug cluster issue server

    Вы увидите «Показан один раз. Скопируйте его сейчас.» и «Выполните это на server.», а под ними строка harnsy debug cluster init server --join harnsy-relay://… --token <token>.

  5. Проверьте, что релей подключён.

    Откройте «Узлы» на главной машине. Панель релея (в дашборде он называется «посредник») показывает «ждёт», пока нет токена присоединения или лицензия не разрешает другие машины. В терминале команда печатает релей и адрес, по которому подключаются участники.

    harnsy debug cluster relay

    Вы увидите «подключён с …», «адрес для участников» (harnsy-relay://…) и «доступ к посреднику: продлевается сам».

  6. Присоединитесь на другой машине.

    В дашборде другой машины откройте «Узлы», выберите «Вступить в кластер мастера», вставьте строку и нажмите «Вступить». Или выполните строку в терминале. Вставляйте строку целиком: присоединение через релей без пина отклоняется.

    harnsy debug cluster init server --join harnsy-relay://… --token <token>

    Вы увидите «Узел вступил в … подключается…». На главной машине участник появляется в списке «Узлов», а в его строке — «путь: через посредника …».

Как отменить Чтобы убрать участника, отзовите его (случай 5). Чтобы перестать пользоваться релеем, выполните harnsy debug cluster relay off и перезапустите harnsy; участникам снова понадобится прямой адрес.

↑ Случаи

Машина коллеги со своим входом

Коллега присоединяется к вашей главной машине со своим входом в Claude, Codex или OpenCode. Вход остаётся на его машине.

  1. Подготовьте главную машину.

    Настройте её как в случае 1 или возьмите главную машину, до адреса которой коллега может дотянуться.

  2. Решите, чей harnsy Max будет у коллеги.

    Машина со своим ключом harnsy Max не занимает место. Машина без ключа берёт harnsy Max у главной, пока есть свободное место. Число мест задаёт ваш ключ.

    Вы увидите В «Лицензии» — панель «Места для подключённых машин»: «Занято: 1 из 3.»

  3. Выпустите токен для коллеги.

    В дашборде: «Узлы» → «Добавить в кластер», «Узел», имя их машины, права, «Выпустить токен». Дайте только нужное: read и send. «manage» — это доступ к вашему shell.

    harnsy debug cluster issue anna-laptop --scope read,send

    Вы увидите Токен появляется один раз: «Показан один раз. Скопируйте его сейчас.»

  4. Передайте им строку, не публично.

    В строке секрет — токен. В ней же пин главной машины, поэтому их машина проверяет, что говорит именно с вашей.

  5. Коллега присоединяется.

    На их машине: «Узлы» → «Вступить в кластер мастера», вставить строку, «Вступить». Или выполнить строку в терминале.

    harnsy debug cluster init anna-laptop --join https://<main machine address>:7789 --token <token>

    Вы увидите «На связи.» Если у машины нет своего ключа, а у главной нет свободного места: «На связи. Мастер ещё не одолжил harnsy Max: возможно, в его лицензии нет свободного места.»

  6. Проверьте.

    На главной машине машина коллеги есть в списке «Узлов». Если она взяла место, «Лицензия» показывает его занятым. Главная машина видит имена их агентов, харнес, статус и папку; вход остаётся на их машине.

Как отменить Отзовите их токен (случай 5). Место освобождается сразу; сама машина сохраняет harnsy Max до 3 дней, пока не кончится последняя выдача.

↑ Случаи

Сервер без публичного адреса

Что делать, зависит от роли сервера.

  1. Сервер — участник: подключайте напрямую.

    Участник всегда соединяется сам и не открывает порт, поэтому сервер за NAT или файрволом присоединяется к доступной главной машине напрямую. Выпустите токен и присоединитесь как в случае 2.

  2. Сервер — главная машина: используйте релей.

    Если сам сервер — главная машина и до него не дотянуться, настройте его как в случае 1. Участники подключаются к нему через адрес релея, без открытого порта.

Как отменить Как в случае 1 или случае 5.

↑ Случаи

Прямые участники и участники через релей на одной главной машине

Часть участников в вашей сети, часть нет. Одна главная машина обслуживает тех и других одновременно.

  1. Настройте релей как в случае 1.

    Шаги 1 и 2 из случая 1; перезапуск — дальше.

  2. Откройте порт кластера для прямых участников.

    Это нужно только для машин вашей сети: главной машине, у которой только участники через релей, открытый порт не нужен. Запустите установщик ещё раз с адресом кластера. Он перепишет службу и перезапустит harnsy, а это и есть перезапуск, который нужен настройке релея. 0.0.0.0 — все адреса этой машины; чтобы открыть порт только в вашей сети, укажите адрес машины в ней, например 192.168.1.10:7789. Порт сам отдаёт TLS.

    harnsy install --cluster-addr 0.0.0.0:7789
  3. Выпустите токен для участника через релей.

    Оставьте «Адрес мастера» пустым: строка несёт адрес релея.

    harnsy debug cluster issue far-laptop
  4. Выпустите токен для прямого участника.

    Впишите в «Адрес мастера» адрес главной машины в вашей сети.

    harnsy debug cluster issue office-pc --url https://<main machine address>:7789
  5. Присоедините каждую машину её строкой.

    Как в шаге 6 случая 1, каждую на своей машине.

    Вы увидите В каждой строке «Узлов» указан путь: «через посредника …» или «напрямую, порт 7789».

Как отменить Отзовите участника (случай 5).

↑ Случаи

Убрать участника

Машина больше не должна быть в кластере, или её токен мог утечь.

  1. Найдите его токен.

    На главной машине: «Узлы» → «отозвать» рядом с токеном участника, и всё. В терминале сначала выведите список токенов.

    harnsy debug cluster tokens
  2. В терминале отзовите по номеру.

    Номер возьмите из списка.

    harnsy debug cluster revoke <id>

    Вы увидите Соединение участника закрывается сразу, если отозвать в дашборде, и в течение 20 секунд, если из терминала. Всё, что ждало его в очереди, отбрасывается. Место освобождается в этот момент: в «Лицензии» занято на одно меньше. Участник, который брал harnsy Max, сохраняет его, пока не кончится его последняя выдача, до 3 дней.

Как отменить Чтобы присоединиться снова, выпустите на главной машине новый токен; на участнике выберите «Переподключиться» на вкладке «Узлы» или выполните напечатанную команду harnsy debug cluster init … --join … --token … --force.

↑ Случаи

Включает ключ.

Добавьте ключ harnsy Max на странице «Лицензия» — и функция включится.

Подать заявку на ключ →

Что в harnsy и что в harnsy Max? →

Честно об ограничениях

  • Пока главной машины нет в сети, участники работают локально и хранят сообщения, пока он не вернётся.
  • Релей видит не «ничего»: он знает, кто, когда и сколько, и хранит это в журнале. Оборвать соединение он может; читать и менять содержимое не может.
  • Размещённому релею (бета) нужен ключ harnsy Max. Собственный релей запланирован.

Ваша первая команда — в одной фразе.

Установка — одна фраза вашему агенту. Чтобы harnsy сам открывал агентов, он управляет терминалом: tmux на Linux и macOS, собственный терминальный хост на Windows.

Установи harnsy по инструкции: https://harnsy.dev/llms.txt
site-3fлид · Claude Codeна связитолько смотреть
❯ Распланируй #42 с командой.

Жду разбор от analyst-7a…

от analyst-7a через harnsy❯ #42 разобрана: три критерия приёмки, включая повтор через 24 ч.

Передаю #42 разработчику site-9a.

❯