Главная / Статьи / Практические рекомендации: Запустите Hermes Agent локально (и безопасно) с помощью Ollama и

Практические рекомендации: Запустите Hermes Agent локально (и безопасно) с помощью Ollama и

Пошаговая инструкция к практическим рекомендациям: запуск агента Hermes локально (и безопасно) с помощью Ollama, а также шаблоны контрактов, проверок и блоки для вставки кода для команд, использующих эту схему.

4149 слов

Используйте это как переработанную версию идей из статьи «Запуск агента Hermes локально (и безопасно) с помощью Ollama и Rootless Podman на Arch Linux» для операторов: четкие этапы, упорядоченные блоки кода и записи по восстановлению, сохраняющиеся при передаче задачи. Этап Обзора работает наилучшим образом, если рассматривать его как измеримую основу. Сначала зафиксируйте один идеальный пример работы, один случай сбоя и записи по откату, прежде чем расширять объем работ. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия результатам работы, определите критерии успеха и не допускайте молчаливого частичного выполнения задачи.

1. Установка Rootless Podman

Для настройки этапа Podman без прав root при одной установке необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение затрат на раннем этапе предотвращает неожиданные счета при переходе с демо-среды в общедоступные среды. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний обмена сообщениями.

sudo pacman -Syu podman
1) crun
2) krun
3) runc
1
podman --version
podman info --format '{{.Host.OCIRuntime.Name}}'
crun
grep "^$USER:" /etc/subuid
grep "^$USER:" /etc/subgid

2. При необходимости устраните проблемы с Rootless OverlayFS

Для второй стадии решения проблемы rootless OverlayFS необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь граф. Разделяйте процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний обмена сообщениями.

kernel does not support overlay fs:
'overlay' is not supported over extfs
sudo pacman -S fuse-overlayfs
which fuse-overlayfs
/usr/bin/fuse-overlayfs
~/.config/containers/storage.conf
[storage]
driver = "overlay"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
podman info --debug | grep -Ei 'graphDriverName|mount_program|overlay'

3. По желанию: переместите хранилище Podman на более большой диск

Для трех необязательных этапов с использованием Podman необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не элементами последующей доработки. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний обмена сообщениями. Для трех необязательных этапов с использованием Podman необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Считайте этот этап контрактом между входными данными и проверенными выходными результатами. Укажите названия файлов, определите критерии успеха и не допускайте безответственного частичного завершения работы.

write /var/tmp/container_images_storage...:
no space left on device
$HOME/.local/share/containers/storage
/var/tmp
/path/to/large-drive/podman/
├── storage/
└── tmp/
sudo mkdir -p /path/to/large-drive/podman/storage
sudo mkdir -p /path/to/large-drive/podman/tmp
sudo chown -R "$USER:$USER" /path/to/large-drive/podman
mkdir -p ~/.config/containers
nano ~/.config/containers/storage.conf
[storage]
driver = "overlay"
graphroot = "/path/to/large-drive/podman/storage"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
export TMPDIR=/path/to/large-drive/podman/tmp
echo 'export TMPDIR=/path/to/large-drive/podman/tmp' >> ~/.bashrc
source ~/.bashrc
podman info --format 'GraphRoot: {{.Store.GraphRoot}}'
podman info --debug | grep -Ei 'graphRoot|imageCopyTmpDir|mount_program'
~/.local/share/containers/storage

4. Создайте единственную папку хоста, к которой сможет получить доступ Hermes

При работе над этим шагом сначала запишите условия использования: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет избежать ошибок при последующих изменениях кода. Записывайте время выполнения операций, стоимость токенов или запросов рядом с результатами их работы. Отображение стоимости заранее предотвращает неожиданные счета при переходе с демо-среды в общедоступные среды. Фиксируйте идентификатор запроса, идентификатор модели и время задержки при каждом вызове. Без такой записи периодические ошибки поставщика могут быть приняты за баги приложения.

export HERMES_WORKSPACE="$HOME/path/to/Hermes-Workspace"
mkdir -p "$HERMES_WORKSPACE"
Obsidian Vault/
├── Personal/
├── Work/
├── Research/
└── Agent Workspace/       ← only this folder is exposed
podman volume create hermes-data
podman volume create ollama-models

5. Настройка доступа к GPU AMD

При работе над пятью этапами настройки GPU AMD сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Записывайте ID запроса, ID модели и время задержки при каждом вызове. Без такой отчетности периодические ошибки поставщика будут выглядеть как баги приложения.

/dev/kfd
/dev/dri
ls -l /dev/kfd
ls -l /dev/dri/render*
groups
sudo usermod -aG video,render "$USER"
groups
groups
video render

6. Проверьте /dev/net/tun

При работе над этапом «6 Check dev net» сначала запишите условия работы системы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте одновременно успешный и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки. Ведите журнал записей с идентификатором запроса, идентификатором модели и временем задержки при каждом вызове. Без такой отчетности периодические ошибки поставщика будут выглядеть как баги приложения. При работе над этапом «6 Check dev net» сначала запишите условия работы системы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Рассматривайте этот этап как договор между входными данными и проверенными результатами. Дайте названия всем элементам, определите критерии успешности и не допускайте безусловного частичного завершения операций.

pasta failed with exit code 1:
Failed to open() /dev/net/tun: No such device
ls -l /dev/net/tun
sudo modprobe tun
uname -r
ls /usr/lib/modules/

7. Выбор локальной модели

Этот этап «Выбор локальной модели» работает наилучшим образом, если рассматривать его как измеримую поверхность. Сначала соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию, прежде чем расширять объем работ. Записывайте временные показатели, а также стоимость токенов или запросов рядом с функциональными результатами. Отображение стоимости на раннем этапе предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. Закрепите интерпретатор и файл блокировки зависимостей перед обучением циклу. Различия между ноутбуком и средой CI являются наиболее распространенной причиной скрытых сбоев в демонстрациях API.

gemma4:12b
export HERMES_MODEL="gemma4:12b"

8. Загрузка изображений контейнеров

Этап обработки контейнера в рамках метода 8 Pull работает наилучшим образом, если рассматривать его как измеримую поверхность. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объема работ. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Закрепите версию интерпретатора и файл с информацией о зависимостях до начала работы цикла. Различия между ноутбуком и средой CI являются наиболее распространенной причиной скрытых сбоев в демонстрациях API.

podman pull docker.io/ollama/ollama:latest
podman pull docker.io/ollama/ollama:rocm
podman pull docker.io/nousresearch/hermes-agent:latest

9. Скачайте модель в постоянный том

Этап «Загрузка модели» работает наилучшим образом, когда его рассматривают как измеримую сферу. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Документируйте одновременно успешный и восстановительный пути выполнения. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не этапом последующей доработки. Фиксируйте версию интерпретатора и файлы блокировки зависимостей перед запуском цикла. Различия между лаптопом и средой CI являются наиболее распространённой причиной скрытых сбоев в демонстрациях API. Этап «Загрузка модели» работает наилучшим образом, когда его рассматривают как измеримую сферу. Соберите один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия всем элементам, определите критерии успеха и не допускайте скрытого частичного завершения работы.

podman rm -f ollama-bootstrap 2>/dev/null
podman run -d \
  --name ollama-bootstrap \
  -v ollama-models:/root/.ollama \
  docker.io/ollama/ollama:latest
podman rm -f ollama-bootstrap 2>/dev/null
podman run -d \
  --network host \
  --name ollama-bootstrap \
  -v ollama-models:/root/.ollama \
  docker.io/ollama/ollama:latest
podman exec -it ollama-bootstrap \
  ollama pull "$HERMES_MODEL"
podman exec ollama-bootstrap ollama list
gemma4:12b
podman rm -f ollama-bootstrap
container name "ollama-bootstrap" is already in use
podman rm -f ollama-bootstrap

10. Создание сети только для внутреннего использования

На этапе 10 «Создание сети только для внутреннего использования» необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение стоимости заранее помогает избежать неожиданных счетов при переходе с демо-среды в общедоступные среды. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний диалога.

--network none
podman network create \
  --ignore \
  --internal \
  hermes-internal
podman pod create \
  --name hermes-local \
  --network hermes-internal \
  --userns=keep-id:uid=10000,gid=10000

11. Запуск Ollama с использованием AMD ROCm

Для запуска Ollama с использованием фазы 11 необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Конфигурацию следует хранить отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний разговора.

podman run -d \
  --name ollama \
  --pod hermes-local \
  --device /dev/kfd \
  --device /dev/dri \
  --group-add keep-groups \
  -e HOME=/root \
  -e OLLAMA_MODELS=/root/.ollama/models \
  -e OLLAMA_CONTEXT_LENGTH=64000 \
  -v ollama-models:/root/.ollama \
  docker.io/ollama/ollama:rocm
--device /dev/kfd
--device /dev/dri
--group-add keep-groups
ollama/ollama:rocm
HOME=/root
OLLAMA_MODELS=/root/.ollama/models
podman exec ollama ollama list
podman logs ollama
HOME=/
OLLAMA_MODELS=/.ollama/models
/root/.ollama/models
HOME=/root
OLLAMA_MODELS=/root/.ollama/models
podman exec ollama ollama list

12. Проверка того, действительно ли ROCm использует GPU

На этапе 12 Verify ROCm необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо одновременно задокументировать успешный сценарий выполнения и сценарий восстановления. Повторные попытки, проверки человеком и обработка неработоспособных сообщений являются частью продукта, а не этапом последующей доработки. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний обмена сообщениями. На этапе 12 Verify ROCm необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Считайте этот этап договором между входными данными и проверенными результатами. Дайте названия результатам работы, определите критерии успеха и не допускайте безответственного частичного завершения задачи.

podman logs ollama 2>&1 | grep -Ei 'gpu|rocm|amd|gfx'
podman exec -it ollama \
  ollama run gemma4:12b \
  "Reply with exactly: AMD GPU test successful"
podman exec ollama ollama ps
PROCESSOR
CONTEXT
64000

13. Запуск Hermes с подключением ровно одной папки-хоста

При работе над этапом 13 «Запуск Hermes» сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и последствия частичной неудачи. Такой список поможет сохранять честность при последующих изменениях кода. Записывайте время выполнения и стоимость токенов или запросов рядом с функциональными результатами. Отслеживание затрат на раннем этапе предотвращает неожиданные счета при переходе с демо-среды в общедоступные среды. Фиксируйте идентификатор запроса, идентификатор модели и время задержки при каждом вызове. Без такой записи периодические ошибки поставщика могут показаться багами приложения.

podman run -d \
  --name hermes \
  --pod hermes-local \
  --security-opt=no-new-privileges \
  --pids-limit 512 \
  -v hermes-data:/opt/data \
  -v "$HERMES_WORKSPACE:/opt/data/workspace:rw,nodev,nosuid" \
  -w /opt/data/workspace \
  docker.io/nousresearch/hermes-agent:latest \
  sleep infinity
/:/host
/home:/home
~/.ssh
~/.config
Docker socket
Podman socket
$HERMES_WORKSPACE
        ↓
/opt/data/workspace
hermes-data
        ↓
/opt/data

14. Проверка границ подключения

При работе над 14-й стадией проверки подключения сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы с настройками окружения, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Записывайте ID запроса, ID модели и время задержки при каждом вызове. Без такой отчетности периодические ошибки поставщика будут выглядеть как баги приложения.

podman inspect hermes \
  --format '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}'
Podman volume -> /opt/data
your allowed folder -> /opt/data/workspace
podman exec hermes sh -c \
  'test ! -S /var/run/docker.sock && echo "No Docker socket exposed"'
podman exec hermes sh -lc \
  'test -e "$HOME/.ssh" && echo "SSH directory visible" || echo "Host SSH directory not visible"'

15. Проверка возможности связи Hermes с Ollama

При работе над этапом «15 Verify Hermes can stage» сначала запишите условия работы системы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Документируйте как успешный, так и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки. Записывайте идентификатор запроса, идентификатор модели и время задержки при каждом вызове. Без такой отчетности периодические ошибки поставщика будут выглядеть как баги приложения. При работе над этапом «15 Verify Hermes can stage» сначала запишите условия работы системы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой чек-лист поможет сохранять честность при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными результатами. Дайте названия всем элементам, определите критерии успешности и не допускайте безусловного принятия частично завершенных операций.

podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("http://127.0.0.1:11434/v1/models").read().decode())'
podman exec hermes python - <<'PY'
...
PY
podman exec -i hermes python - <<'PY'
import urllib.request
print(
    urllib.request.urlopen(
        "http://127.0.0.1:11434/v1/models"
    ).read().decode()
)
PY

16. Проверьте, что доступ к внешней сети заблокирован

Шаг 16 «Проверьте, что доступ к внешней сети заблокирован», наилучшим образом работает, если рассматривать его как измеримую характеристику. Сохраните один образец успешной работы, один пример сбоя и записку о возврате к предыдущему состоянию перед расширением объёма тестирования. Записывайте временные показатели, а также стоимость токенов или запросов рядом с результатами функциональных тестов. Отслеживание затрат на раннем этапе помогает избежать неожиданных счетов при переходе от демо-среды к общедоступным средам. Перед изучением циклов закрепите интерпретатор и файлы блокировки зависимостей. Различия в работе между ноутбуком и средой CI являются наиболее частой причиной скрытых сбоев в демонстрациях API.

podman exec hermes python -c \
'import urllib.request; print(urllib.request.urlopen("https://example.com", timeout=5).read())'
podman ps
11434/tcp
0.0.0.0:11434->11434/tcp

17. Настройте Hermes для использования локальной версии Ollama

Процесс настройки Hermes для подготовки к работе эффективнее всего, если рассматривать его как измеримую среду. Сначала зафиксируйте один успешный пример работы, один случай сбоя и запись о возврате к предыдущему состоянию, прежде чем расширять объем работ. Храните конфигурацию отдельно от кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Закрепите интерпретатор и файл с информацией о зависимостях до того, как начнете использовать циклы. Различия между ноутбуком и средой CI являются наиболее распространенной причиной скрытых сбоев в демонстрациях API.

podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes model
Ollama Cloud
Custom endpoint (enter URL manually)
http://127.0.0.1:11434/v1
gemma4:12b
64000

18. Используйте локальный терминал Hermes — внутри контейнера

Подход «18 Use Hermes local stage» работает наилучшим образом, когда его рассматривают как измеримую среду. Сохраните один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Документируйте как успешный, так и восстановительный пути выполнения. Повторные попытки, проверки человеком и обработка неработающих сообщений являются частью продукта, а не этапом последующей доработки. Заблокируйте интерпретатор и файлы зависимостей перед запуском цикла. Различия в работе на ноутбуке и в среде CI — самая распространённая причина незаметных сбоев при демонстрации API. Подход «18 Use Hermes local stage» работает наилучшим образом, когда его рассматривают как измеримую среду. Сохраните один идеальный пример работы, один случай сбоя и записку о возврате к предыдущему состоянию перед расширением объёма работ. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия всем элементам, определите критерии успеха и не допускайте незаметного частичного завершения работы.

terminal:
  backend: local
Hermes "local"
      ↓
Hermes container
Hermes "local"
      ↓
your Arch workstation
podman exec --user 10000:10000 hermes \
  hermes config set terminal.backend local
podman exec --user 10000:10000 hermes \
  hermes config set terminal.cwd /opt/data/workspace
podman exec --user 10000:10000 hermes \
  hermes config set terminal.home_mode profile

19. Запуск Hermes

Для 19-го этапа запуска Hermes необходимо заранее определить входные данные, ответственного за выполнение шага и критерии завершения перед внесением изменений в код. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рядом с функциональными результатами следует записывать время выполнения и стоимость токенов или запросов. Отображение стоимости на раннем этапе предотвращает неожиданные счета при переходе с демо-среды в общедоступные среды. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний обмена сообщениями.

podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes

20. Автоматическое запуск среды при загрузке системы

Для этапа настройки среды перед изменением кода необходимо определить входные данные, ответственного за выполнение шага и критерии завершения. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, которое операторы могут проверять, не читая весь граф состояний. Разделяйте процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания автоматы состояний обмена сообщениями.

mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/hermes-local.service
[Unit]
Description=Hermes Local AI Pod
After=default.target
[Service]
Type=oneshot
RemainAfterExit=yesExecStart=/usr/bin/podman pod start hermes-local
ExecStop=/usr/bin/podman pod stop -t 30 hermes-localTimeoutStartSec=120
TimeoutStopSec=60[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable hermes-local.service
systemctl --user start hermes-local.service
systemctl --user status hermes-local.service
Active: active (exited)
sudo loginctl enable-linger "$USER"
loginctl show-user "$USER" -p Linger
Linger=yes
podman ps
podman exec -it \
  --user 10000:10000 \
  -w /opt/data/workspace \
  hermes \
  hermes

Устранение проблем, которые действительно возникли

Для устранения неполадок на этом этапе необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Необходимо задокументировать как успешный, так и восстановительный пути работы. Повторные попытки, проверки со стороны человека и обработка неработоспособных сообщений являются частью продукта, а не последующими улучшениями. Необходимо разделить процесс создания клиента от цикла обработки сообщений, чтобы можно было заменять поставщиков без переписывания машины состояний обмена сообщениями. Для устранения неполадок на этом этапе необходимо определить входные данные, ответственного за выполнение шага и критерии завершения перед изменением кода. Операторы должны иметь возможность перезапустить шаг с известной точки контроля, не догадываясь о скрытом состоянии. Рассматривайте этот этап как контракт между входными данными и проверенными выходными результатами. Дайте названия элементам, определите критерии успеха и не допускайте безответных частичных завершений.

Problem:
kernel does not support overlay fs
Fix:
Install fuse-overlayfs and configure it as the overlay mount program.
Problem:
no space left on device under /var/tmp
Fix:
Move Podman's graphroot if needed AND set TMPDIR.
Changing Podman's --tmpdir is not the same thing.
Problem:
ollama-bootstrap name already in use
Fix:
podman rm -f ollama-bootstrap
Problem:
pasta cannot open /dev/net/tun
Fix:
sudo modprobe tun
If the installed modules don't match the running kernel, reboot.
Problem:
Installed nvidia-container-toolkit on an AMD machine
Fix:
Don't.
Use ollama/ollama:rocm with /dev/kfd and /dev/dri.
Problem:
Added myself to video/render but `groups` still didn't show them
Fix:
Log out and back in.
The existing login session retains its original supplementary groups.
Problem:
Ollama model files and manifest exist, but `ollama list` is empty
Fix:
Check:
podman logs ollamaIf Ollama is using:
OLLAMA_MODELS=/.ollama/modelswhile the volume is mounted under:
 /root/.ollamaset explicitly:
HOME=/root
OLLAMA_MODELS=/root/.ollama/models
Problem:
Hermes → Ollama Python test silently prints nothing
Fix:
If using `python -` with a heredoc, add `podman exec -i`.
Or simply use `python -c`.
Problem:
The Hermes provider menu doesn't contain "local Ollama"
Fix:
Choose:
Custom endpoint (enter URL manually)Then:
http://127.0.0.1:11434/v1
Problem:
Everything works, but Hermes reports an inadequate context window
Fix:
Set OLLAMA_CONTEXT_LENGTH=64000 server-side and configure Hermes for the same value.
Verify the real allocation with:
ollama ps

Почему вы предпочитаете это вместо простого доверия агенту

При анализе вопроса «Почему вы предпочитаете этот этап?», сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Рядом с функциональными результатами занесите информацию о времени выполнения и стоимости токенов или запросов. Очевидность затрат с самого начала предотвращает неожиданные счета при переходе от демо-среды к общедоступным средам. Ведите записи идентификатора запроса, идентификатора модели и времени задержки при каждом вызове. Без такой отчетности периодические ошибки поставщика могут выглядеть как баги приложения.

Prompt restrictions
        ↓
Hermes file write protections
        ↓
Hermes container filesystem
        ↓
Rootless Podman user namespace
        ↓
Host filesystem permissions

Примечание о быстро развивающихся локальных инструментах ИИ

При работе над примечанием A о быстро меняющихся этапах сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой список помогает сохранять честность при последующих изменениях кода. Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код. Записывайте ID запроса, ID модели и время задержки при каждом вызове. Без такой отслеживающей информации периодические ошибки поставщика могут выглядеть как баги приложения.

Does Podman see the GPU?
        ↓
Does Ollama see the model?
        ↓
Does Ollama actually use the GPU?
        ↓
Is the context really 64K?
        ↓
Can Hermes reach /v1/models?
        ↓
Can Hermes perform an actual file operation?
        ↓
Can Hermes reach anything it shouldn't?

Итоговый результат

На этапе окончательного результата сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Документируйте как успешный, так и восстановительный сценарии работы. Повторные попытки, проверки со стороны оператора и обработка некорректных сообщений являются частью продукта, а не элементами последующей доработки. Записывайте идентификатор запроса, идентификатор модели и время задержки при каждом вызове. Без такой отчетности периодические ошибки поставщика могут выглядеть как баги приложения. На этапе окончательного результата сначала запишите условия работы: необходимые входные данные, сигнал о успешном выполнении и действия при частичной неудаче. Такой список поможет сохранять честность при последующих изменениях кода. Рассматривайте этот этап как контракт между входными данными и проверенными выходными данными. Дайте названия результатам работы, определите критерии успеха и не допускайте безусловного частичного завершения операции.

Local inference                YES
AMD GPU acceleration           YES
Hermes persistent memory       YES
One writable host workspace    YES
Cloud LLM required             NO
Host filesystem exposed        NO
Podman/Docker socket exposed   NO
Normal Internet egress         NO
Entire Obsidian vault exposed  NO

Чек-лист операционной деятельности

При работе над этапом операционного чек-листа сначала запишите условия контракта: необходимые входные данные, сигнал успешного выполнения и действия при частичной неудаче. Такой чек-лист помогает сохранять честность при последующих изменениях кода.

Предпочитайте небольшие, тестируемые единицы кода вместо обширных скриптов. Если какой-то шаг не сработает, причина должна быть связана с конкретной функцией, а не с запутанной цепочкой операций.

Записывайте идентификатор запроса, идентификатор модели и время задержки при каждом вызове. Без такой записи периодические ошибки поставщика могут выглядеть как баги приложения.

Сохраняйте структуру графа простой и типизированной. Вложенные структуры данных маскируют информацию о том, какой узел заполнил тот или иной поле, и мешают возобновлению работы после прерываний.

Каждый раз, когда это позволяют бюджетные ограничения, добавляйте тест на базовую работоспособность, который проверяет критически важный путь в рамках CI с использованием фикстчеров, а не реальных платных API.

Храните конфигурацию вне кода приложения. Файлы среды, хранилища секретов и флаги функций должны находиться в одном месте, чтобы операторы могли их проверять, не читая весь код.

Перед обновлением стека заморозьте версии, сделайте копию критически важных данных для ключевых этапов и убедитесь, что известны шаги возврата к предыдущей версии. В совместных средах необходимы ограничения на частоту запросов, проверки принадлежности и четко определенный ответственный за обновление секретов. Лучше выбирать надежность, чем креативные одноразовые демонстрации.

Примечание для bab1ff410bd9: не храните ключи поставщика в репозитории, установите лимит токенов на сессию и храните записи результатов рядом с фикстурами для оценки, чтобы последующие замены моделей оставались сопоставимыми.