diff --git a/AGENTS.md b/AGENTS.md
index 3066ccb..53f79dc 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -41,6 +41,7 @@
- hero.svg для статьи: `viewBox="0 0 1200 400"`, фон `#0a0c10`,
паттерн-гексагон `#1a2332`, заголовок моноширинный `#58a6ff`.
Копировать hero.svg из последнего поста как базу — единый стиль.
+- Хэштеги (поле `tags` и хэштеги в тексте) — ТОЛЬКО строчными буквами.
- Блочный код с подсветкой — обязателен там, где нужен (цель проекта).
## Сборка и деплой
diff --git a/content/posts/20260913 - herdr workspace manager for ai agents/hero.svg b/content/posts/20260913 - herdr workspace manager for ai agents/hero.svg
new file mode 100644
index 0000000..a179203
--- /dev/null
+++ b/content/posts/20260913 - herdr workspace manager for ai agents/hero.svg
@@ -0,0 +1,33 @@
+
\ No newline at end of file
diff --git a/content/posts/20260913 - herdr workspace manager for ai agents/index.md b/content/posts/20260913 - herdr workspace manager for ai agents/index.md
new file mode 100644
index 0000000..0ebed2a
--- /dev/null
+++ b/content/posts/20260913 - herdr workspace manager for ai agents/index.md
@@ -0,0 +1,84 @@
+---
+date: '2026-09-13T14:00:00+03:00'
+lastmod: '2026-09-13T14:00:00+03:00'
+draft: false
+title: 'herdr — терминальный workspace-менеджер для AI-агентов'
+slug: 'herdr-workspace-manager-for-ai-agents'
+description: 'herdr — это «среда исполнения», в которой живут coding-агенты: один бинарь на macOS/Linux/Windows, фоновый сервер, который владеет терминалами твоих агентов. Рассказываю про идею, плагины и грабли с $HOME и Nerd Font.'
+
+categories:
+ - 'DevOps'
+ - 'AI'
+
+tags:
+ - 'herdr'
+ - 'cli'
+ - 'devtools'
+ - 'ai-agents'
+ - 'fediverse'
+
+cover:
+ image: "hero.svg"
+ alt: "herdr — терминальный workspace-менеджер для AI-агентов"
+---
+
+herdr — это «среда исполнения», в которой живут твои coding-агенты. Один бинарь (macOS · Linux · Windows, Apache 2.0), ставится одной командой:
+
+```bash
+curl -fsSL https://herdr.dev/install.sh | sh
+```
+
+
+
+## В чём идея
+
+herdr — не очередной терминал и не обёртка над агентами. Это фоновый сервер, который владеет терминалами твоих агентов (Claude Code, Codex, opencode, Cursor, Grok и ещё полтора десятка — 21 агент детектится из коробки). Он не заменяет агентов, он им «арендует» рабочие места.
+
+Ключевое:
+
+- **Всегда в работе.** Закрыл крышку ноутбука, отвалился от сети — агенты продолжают работать. Вернулся с любой машины — всё ровно там, где ты оставил: сессия восстанавливается вместе с раскладкой.
+- **Не надо искать зависшего.** herdr читает каждый пан и помечает агента: working / blocked / idle. Когда агент остановился и ждёт ответа — он сам это говорит. Не нужно лазить по панелям в поисках того, кто ждёт тебя.
+- **Всё на машинах.** Добавляй серверы по SSH (`herdr machine add workbox`) — их воркспейсы и агенты сидят рядом с локальными. Переключился между машинами без отдельного клиента, отсоединился — они продолжают.
+- **Agent-native.** CLI и socket API — одна и та же поверхность, которой агентуры управляют друг другом: сплитят паны, запускают друг друга, ждут, пока другой реально заблокирован, вместо «нажал кнопку и надеюсь».
+
+Сейчас у herdr: ~36,5k звёзд на GitHub, 767k установок, $6M seed-раунд.
+
+## Плагины — то, из-за чего herdr остаётся маленьким и быстрым
+
+Ядро занимается только воркспейсами, панами, агентами и стабильным CLI/socket API. Всё остальное — плагины. Плагин — это директория с манифестом `herdr-plugin.toml` и командами, которые herdr запускает. Язык — любой: Bash, Python, JavaScript, Lua, Rust-бинарь, что угодно, что умеет твоя машина.
+
+- **Нет SDK и нет «ограниченного набора команд».** Весь CLI herdr — это и есть API плагина. Плагин зовёт herdr через `HERDR_BIN_PATH` (переносимо на Unix + Windows).
+- **Манифест описывает:** команды сборки (при установке), startup-хуки (разово после восстановления сессии), actions (ручные команды, можно биндить на клавиши), event-хуки (реакция на `pane.focused`, `tab.created` и др.), panes (UI-панели: overlay / popup / split / tab / zoomed) и link handlers (перехват кликов по URL — например, открыть ссылку на GitHub issue в соседней панели, а не в браузере).
+- **Установка:** `herdr plugin install owner/repo[/subdir]` — клонирует с GitHub, показывает превью, гоняет build-команды, регистрирует. Локальная разработка — `herdr plugin link <папка>`.
+- **Публикация без очередей и модерации:** добавь GitHub-топик `herdr-plugin` + манифест в репозиторий — маркетплейс подхватит в течение 30 минут.
+
+Сейчас в маркетплейсе 1022 плагина из 1005 репозиториев (+1870 звёзд за неделю, 101 новый за неделю).
+
+> **Безопасность:** плагин — обычный код, который исполняется от твоего пользователя, без песочницы. herdr валидирует манифесты, но не ревьюит и не изолирует код. Ставь только от доверенных авторов, смотри `herdr-plugin.toml` и скрипты до установки, пинь `--ref` для конкретной ревизии.
+
+## Примеры плагинов
+
+**herdr-sidebar** (293★) — сайдбар в стиле VS Code для терминала. Файловый эксплорер + панель исходного контроля в одном докируемом пане. Дерево файлов с git-статусами прямо в нём (modified/added/deleted/untracked, «грязные точки» на папках), превью файлов в отдельных табах (эфимерные, double-click — закрепить), syntax-подсветка, VS Code-style диффы, AI-сообщения коммитов, быстрый переход Ctrl+P, экспериментальный встроенный редактор (e). Управление мышью и клавиатурой (m — контекстное меню). Написан на Rust (ratatui + crossterm), один самодостаточный крейт.
+
+```bash
+herdr plugin install alexarthurs/herdr-sidebar/plugins/herdr-sidebar
+```
+
+- [agent-telegram-notify](https://github.com/ogulcancelik/herdr-plugin-examples) — JavaScript-плагин: шлёт сообщение в Telegram, когда агент достигает заданного статуса.
+- [github-link-preview](https://github.com/ogulcancelik/herdr-plugin-examples) — Bash-плагин: открывает кликнутые ссылки на GitHub issues/PR в правой панели через gh.
+- [dev-layout-bootstrap](https://github.com/ogulcancelik/herdr-plugin-examples) — Lua-плагин: создаёт трёхпанельную dev-раскладку вокруг текущей панели.
+- [rust-release-check](https://github.com/ogulcancelik/herdr-plugin-examples) — Rust-плагин: собирается при установке, проверяет чистоту git-дерева.
+
+(все четыре — из репозитория-примера [ogulcancelik/herdr-plugin-examples](https://github.com/ogulcancelik/herdr-plugin-examples))
+
+## Кстати, из практики
+
+Забавный кейс при установке плагинов, о котором стоит знать: herdr хранит конфиг и установленные плагины в `$HOME/.config/herdr/` — то есть привязан к `$HOME`, а не к бинарю. Если поставить плагин из-под другого пользователя (или с другим HOME, как это бывает у агентов-помощников), он уйдёт в чужую конфиг-директорию, и твой обычный `herdr plugin list` покажет «No plugins installed». Лечится простой переустановкой из-под нужного пользователя. И ещё: если плагин при первом запуске предложил установить Nerd Font — его встроенная установка может упасть из-за отсутствия `unzip` в системе, тогда шрифт ставится вручную (JetBrainsMono.zip → `~/.local/share/fonts` → `fc-cache -f`).
+
+## Ссылки
+
+[herdr](https://herdr.dev) — главный сайт
+[исходники](https://github.com/herdrdev/herdr) — репозиторий на GitHub
+[маркетплейс плагинов](https://herdr.dev/plugins) — каталог плагинов
+[документация по плагинам](https://herdr.dev/docs/plugins) — как писать свои
+[примеры плагинов](https://github.com/ogulcancelik/herdr-plugin-examples) — репозиторий с примерами
\ No newline at end of file
diff --git a/content/posts/20260913 - herdr workspace manager for ai agents/screenshot-small.jpg b/content/posts/20260913 - herdr workspace manager for ai agents/screenshot-small.jpg
new file mode 100644
index 0000000..66aaf83
Binary files /dev/null and b/content/posts/20260913 - herdr workspace manager for ai agents/screenshot-small.jpg differ
diff --git a/content/posts/20260913 - herdr workspace manager for ai agents/screenshot.png b/content/posts/20260913 - herdr workspace manager for ai agents/screenshot.png
new file mode 100644
index 0000000..346c60a
Binary files /dev/null and b/content/posts/20260913 - herdr workspace manager for ai agents/screenshot.png differ
diff --git a/content/posts/20260913 - systemd1 hang systemctl reboot force/hero.svg b/content/posts/20260913 - systemd1 hang systemctl reboot force/hero.svg
new file mode 100644
index 0000000..4cdf543
--- /dev/null
+++ b/content/posts/20260913 - systemd1 hang systemctl reboot force/hero.svg
@@ -0,0 +1,36 @@
+
\ No newline at end of file
diff --git a/content/posts/20260913 - systemd1 hang systemctl reboot force/index.md b/content/posts/20260913 - systemd1 hang systemctl reboot force/index.md
new file mode 100644
index 0000000..1520acf
--- /dev/null
+++ b/content/posts/20260913 - systemd1 hang systemctl reboot force/index.md
@@ -0,0 +1,178 @@
+---
+date: '2026-09-13T15:55:00+03:00'
+lastmod: '2026-09-13T15:55:00+03:00'
+draft: false
+title: 'Завис systemd1: почему без перезагрузки не обойтись'
+slug: 'systemd1-hang-systemctl-reboot-force'
+description: 'systemd1 висит: systemctl молчит, bus-активация org.freedesktop.systemd1 таймаутит, docker жив, а PID 1 превратился в один поток. Разбор: почему daemon-reexec не помог, почему Яндекс-Диск был лишь триггером и как перезагрузка с --force --force разрулила ситуацию.'
+
+categories:
+ - 'DevOps'
+ - 'Linux'
+
+tags:
+ - 'systemd'
+ - 'systemctl'
+ - 'dbus'
+ - 'fuse'
+ - 'davfs2'
+ - 'reboot'
+ - 'admin'
+
+keywords:
+ - 'systemd1'
+ - 'org.freedesktop.systemd1'
+ - 'Failed to activate service'
+ - 'service_start_timeout'
+ - 'daemon-reexec'
+ - 'systemctl reboot'
+ - '--force --force'
+ - 'FUSE'
+ - 'davfs2'
+ - 'yandex disk'
+
+cover:
+ image: "hero.svg"
+ alt: "Завис systemd1 — systemctl молчит, лечится перезагрузкой"
+---
+
+# Завис systemd1: почему без перезагрузки не обойтись
+
+**TL;DR:** systemd1 (D-Bus-сервис `org.freedesktop.systemd1`, через который работает `systemctl`) завис. `systemctl` молчит, активация сервиса упирается в 25-секундный таймаут, а процесс systemd (PID 1) остаётся с одним-единственным потоком — мёртвый менеджер, который не обслуживает шину. `daemon-reexec` не помогает. Перезагрузка — единственный выход, и `systemctl --force --force reboot` справляется даже когда обычный reboot падает с `Connection timed out`.
+
+## Как это выглядело
+
+Всё началось с того, что у меня завис FUSE-модуль с Яндекс-Диском (`/mnt/yandex-disk`, davfs2). Пока я разбирался, я заметил, что команды `systemctl` перестали отвечать вообще.
+
+Когда я попробовал перезагрузиться обычным способом:
+
+```
+$ sudo systemctl reboot
+
+Broadcast message from root@bigbox on pts/31 (Sun 2026-09-13 13:08:39 UTC):
+The system will reboot now!
+
+Call to Reboot failed: Connection timed out
+Failed to start reboot.target: Connection timed out
+See system logs and 'systemctl status reboot.target' for details.
+It is possible to perform action directly, see discussion of --force --force in man:systemctl(1).
+```
+
+Беда в том, что `systemctl reboot` сам идёт через systemd1. Если systemd1 висит, то и перезагрузиться через него нельзя — получается «замкнутый круг».
+
+При этом интересная деталь: `docker ps` и `docker info` работали нормально, контейнеры — живые, *мои* агенты продолжали работать. Падал только сам systemd-интерфейс.
+
+## Что показала диагностика
+
+**1. systemd1 не активируется на D-Bus.**
+
+```
+$ busctl | grep systemd1
+org.freedesktop.systemd1 - - - (activatable) - - -
+```
+
+`(activatable)` значит, что сервис зарегистрирован, но не запущен. При попытке его запустить:
+
+```
+$ systemctl is-system-running
+[tаймаут через 25 секунд]
+
+$ journalctl | grep systemd1
+dbus-daemon[1859]: Failed to activate service 'org.freedesktop.systemd1':
+timed out (service_start_timeout=25000ms)
+```
+
+**2. PID 1 — systemd — жив, но как будто мёртв внутри.**
+
+```
+$ ps -o pid,nlwp,stat,etime -p 1
+ 1 1 Ss 3-06:26:57
+```
+
+Ключевое — `nlwp = 1`. Нормальный systemd держит десятки потоков (они обслуживают шину, юниты, таймеры...). Один поток означает, что менеджер фактически не работает, а просто висит. Именно поэтому `daemon-reexec` не реагирует толком — перезапускать некому.
+
+**3. Docker тут ни при чём.**
+
+- `dockerd` жил, `docker ps` отвечал мгновенно;
+- все контейнеры — `Up`, с restart-политиками `unless-stopped` / `always`;
+- даже `systemctl restart docker` упал бы в тот же таймаут systemd1, потому что этот вызов тоже идёт через шину.
+
+**4. Даже перезагрузка через systemctl не сработала:** `Call to Reboot failed: Connection timed out`.
+
+## Почему FUSE-Яндекс-Диск виноват лишь отчасти
+
+Я сначала грешил на зависший davfs2: он висел, и systemd вполне мог залипнуть, пытаясь обратиться к .mount-юниту, который упирается в молчащую FUSE-точку. **Это правдоподобный триггер.** Но уже к моменту диагностики я перемонтировал Яндекс-Диск заново, и он заработал — а systemd1 так и остался висящим.
+
+Проверка это подтвердила:
+
+- `ls /mnt/yandex-disk/` отвечает мгновенно;
+- D-state (непрерываемые) процессы отсутствуют;
+- демон davfs2 жив.
+
+То есть: точка Yandex больше не блокирует ничего, а systemd1 всё равно не оживает. Вывод — **проблема уже в самом systemd**, а не в FUSE. FUSE был спусковым крючком, но чинить нужно было не монтирование.
+
+## Что мы перепробовали перед ребутом
+
+**Попытка 1: `systemctl daemon-reexec`** — перезапуск systemd «на месте», самая мягкая реанимация.
+
+```
+$ sudo systemctl daemon-reexec
+# вернуло 0
+```
+
+Вернуло успех, но шину не оживило. Потому что systemd с одним потоком не смог толком выполнить re-exec — команда «прошла», но менеджер остался в том же состоянии. Проверка после:
+
+```
+$ busctl | grep systemd1
+org.freedesktop.systemd1 - - - (activatable) ...
+$ systemctl is-system-running
+[tаймаут]
+```
+
+Ничего не изменилось.
+
+**Попытка 2: обычный reboot.** Упал с `Connection timed out` (см. выше). По понятной причине: reboot через systemctl — это тоже запрос к systemd1.
+
+**Попытка 3: `systemctl --force --force reboot`** — двойной форсированный перезапуск. Именно он сработал:
+
+```
+$ sudo systemctl --force --force reboot
+Rebooting.
+```
+
+## Как это работает: зачем два --force
+
+`systemctl reboot` без флагов просит systemd корректно завершить все юниты. Если systemd1 виснет, запрос не проходит. Два `--force` — это «мне плевать на зависшие службы, перезагружайся»:
+
+- первый `--force` — пропустить остановку юнитов (не ждать, пока всё аккуратно завершится),
+- второй `--force` (для reboot) — выполнить системный вызов перезагрузки напрямую, **в обход systemd как менеджера**.
+
+То есть это фактически «аварийная» перезагрузка через системный механизм ядра (reboot(2)), минуя зависший менеджер. Риск — грязное завершение: незаписанные данные могут потеряться, но при зависшей шине это часто единственный вариант.
+
+## После перезагрузки
+
+Система поднялась за ~11 минут:
+
+- `systemctl is-system-running` → `degraded` (отвечает мгновенно — шина жива);
+- `org.freedesktop.systemd1` на busctl теперь **активирован** (PID systemd, `:1.5`), а не `(activatable)`;
+- docker и containerd — `active`;
+- **все 27 контейнеров** поднялись сами (restart-политики `unless-stopped`/`always` сработали): gitea, netbox, grafana, prometheus, loki, gotosocial, garage, ollama, open-webui, searxng и остальные;
+- `/mnt/yandex-disk` смонтирован и отвечает; `/opt/hermes/obsidian-vault` (s3fs) тоже на месте.
+
+Единственный failed-юнит — `mdmonitor.service` (мониторинг MD-массивов). Падает с `mdadm: No mail address or alert command - not monitoring` — это не поломка, а отсутствие настроенного алерта. На рабочие массивы не влияет, можно замаскировать.
+
+## Выводы
+
+1. **Если systemctl молчит, а docker работает — значит, дело в шине, а не в docker.** Проверяй `busctl | grep systemd1` и `nlwp` у PID 1.
+2. **`daemon-reexec` не всегда реанимирует** — если у systemd остался один поток, перезапускать себя фактически некому.
+3. **Обычный `systemctl reboot` тоже идёт через systemd1** — при висящей шине он не сработает. Нужен `--force --force`.
+4. **FUSE-зависание может быть триггером**, но не обязательно причиной. Если точка перемонтирована и отвечает, а systemd1 всё равно молчит — лечится только перезагрузкой.
+5. **Restart-политики контейнеров себя отрабатывают**: `unless-stopped`/`always` подняли всё после ребута, ничего не пришлось поднимать руками.
+
+Полный разбор с командами, как это диагностировать, — в WALKTHROUGH проекта.
+
+---
+
+**Теги:** #systemd #systemctl #dbus #fuse #davfs2 #reboot #администрирование #грабли
+
+Если у вас `systemctl` молчит, а контейнеры живут — проверьте `busctl | grep systemd1` и `ps -o nlwp -p 1`. И не тратьте время на daemon-reexec: при пульсе «один поток» перезагрузка всё равно неизбежна.
\ No newline at end of file