Monolith
Y2Z (организация на GitHub) · лицензия CC0-1.0
Сохраняет страницу сайта одним HTML-файлом: стили, картинки и скрипты, которые удалось скачать, оказываются внутри. Агент положит копию страницы в архив или передаст её дальше.
✓ Проверено 19.10.2026: Ubuntu 24.04 в одноразовом контейнере Docker на сервере, от root: Monolith 2.11.6 готовым файлом monolith-cli-linux-x86_64 с GitHub, тестовая страница на python3 -m http.server по адресу 127.0.0.1:8000. Что именно проверяли
Какую задачу решает
Консольная программа, которая сохраняет страницу сайта одним HTML-файлом. Стили, картинки, шрифты и скрипты, которые удалось скачать, она встраивает в сам файл, чтобы смотреть копию без сети. Данные, которые страница догружает скриптом после открытия, в копию не попадут. Агент так сохраняет свою или чужую страницу для архива, проверки или передачи другому человеку.
- Берёт адрес страницы, файл с диска или HTML из стандартного ввода. В прогоне встроила картинку, значок сайта, стили вместе с файлом из @import и картинкой фона из CSS, а файл скрипта переписала текстом внутрь тега script. Суммы sha256 встроенных картинок совпали с исходными.
- Ключ -j убирает скрипты, -I ставит в файл правило Content-Security-Policy, по которому браузер не ходит в сеть за ресурсами страницы. Ключи -c, -i, -F, -f, -a и -v по справке убирают стили, картинки, шрифты, фреймы, звук и видео.
- Ключ -d оставляет только ресурсы с названных доменов, -B вместе с -d запрещает названные домены. В прогоне картинка с другого адреса осталась ссылкой и в файл не попала.
- В прогоне ключ -m сохранил страницу в MHTML, -D создал недостающую папку по пути файла, а подстановка %title% дала файлу имя из заголовка страницы. По README есть ещё подстановка %timestamp% и вывод в стандартный вывод через -o -.
Пример результата
Говоришь агенту
Сохрани страницу http://127.0.0.1:8000/index.html одним файлом в archive/page.html, без скриптов, со всеми картинками и стилями внутри.
Что получится
Мы прогнали этот сценарий на тестовой странице, которую скрипт сам собрал и раздал с 127.0.0.1:8000. Команда monolith -j -I -D http://127.0.0.1:8000/index.html -o archive/page.html создала папку archive и файл 1 849 байт, код 0. В файле встроены логотип, значок сайта, стили и картинка фона, теги script пустые, стоит правило Content-Security-Policy с script-src 'none'. Русский текст на месте, ссылка about.html стала полным адресом. Исходные файлы сайта не изменились.
Паспорт
- Кто делает
- Y2Z (организация на GitHub)
- Исходный код
- github.com/Y2Z/monolith
- Инструкция
- github.com/Y2Z/monolith#readme
- Лицензия
- CC0-1.0
- Версия
- 2.11.6 на 19.10.2026
- Системы
- macOS · Linux · Windows
- Где работает
- На компьютере, на сервере и в контейнере
- Цена
- Бесплатно
- Проверка
- Проверено 19.10
Установить агентом
Установи программу «Monolith». Работай по шагам и после каждого коротко говори, что сделал.
Что это за программа (каталог smyslokod.ru, официальные источники сверены 19.10.2026):
- исходный код: https://github.com/Y2Z/monolith
- инструкция по установке: https://github.com/Y2Z/monolith#readme
- актуальная версия на 19.10.2026: 2.11.6
- лицензия: CC0-1.0
Правила:
1. Ничего не устанавливай и не меняй, пока я не скажу «да» на твой план.
2. Ставь только способами из этого промпта. Сторонние сборки, скрипты с форумов и из чужих репозиториев не бери.
3. Мои проекты не трогай: не меняй их файлы, виртуальные окружения и списки зависимостей (package.json, requirements.txt, pyproject.toml).
4. Команды с sudo, правку профиля оболочки (~/.zshrc, ~/.bashrc) и переменной PATH делай только после моего отдельного «да» на каждую.
5. Не проси у меня пароли и ключи и не выводи их. Если нужен пароль администратора, дай команду, я выполню её сам.
6. Чужие страницы сохраняй с ключами -j и -I.
7. Страницу, для которой нужен вход (файл куки -C, логин и пароль в адресе), сохраняет сам человек своей командой. Ключ -k ставь только после «да» человека.
8. Перед сохранением проверь, что файла с таким именем нет: программа заменит его молча.
9. После сохранения прочитай stderr: код 0 бывает и тогда, когда часть ресурсов не скачалась.
Шаги:
0. Определи, где ты работаешь: мой компьютер, сервер или контейнер. Какая система и процессор, какие менеджеры пакетов есть (Homebrew, apt, winget, uv, pipx). Ставить нужно туда, где ты сам запускаешь команды.
- на компьютере: сохранить страницу для себя или передать её человеку без доступа к сайту.
- на сервере: например, сохранять копии своих страниц по расписанию.
- в контейнере: мы проверяли в контейнере Ubuntu 24.04 от root.
1. Проверь, не стоит ли программа уже: monolith -V. Если стоит и запускается, ничего не ставь и переходи к шагу 5.
2. Отдельных зависимостей у программы нет. Проверь свободное место на диске: нужно Готовый файл для Linux x86_64 - 8 216 768 байт, monolith-cli.exe для Windows - 5 486 592 байт. Сколько займёт установка через Homebrew, мы не мерили. Сохранённая страница обычно больше исходного HTML: картинки внутри файла записаны в base64..
3. Составь план: каким одним способом из списка ниже будешь ставить, что появится на диске и сколько места займёт, что поменяется в системе и как потом удалить. Покажи план и жди моего «да».
Способы из официальных источников:
- macOS, Homebrew: brew install monolith (Команду даёт README проекта. Формула monolith в Homebrew - эта программа, описание формулы «CLI tool for saving complete web pages as a single HTML file». brew install мы не запускали.)
- Windows, файл monolith-cli.exe с GitHub: New-Item -ItemType Directory -Force $env:LOCALAPPDATA\Monolith | Out-Null; Invoke-WebRequest -Uri https://github.com/Y2Z/monolith/releases/download/v2.11.6/monolith-cli.exe -OutFile $env:LOCALAPPDATA\Monolith\monolith.exe; (Get-FileHash $env:LOCALAPPDATA\Monolith\monolith.exe).Hash (Файл 5 486 592 байт. Сверь выведенную сумму с AF9A6E1C6E245F94397B1544C89041F837B79B45BAD93454C1F7A658CAC68383: так записано в поле digest у файла выпуска. Папку нужно добавить в PATH или звать программу по полному пути. На Windows мы не проверяли.)
- Linux, готовый файл с GitHub: curl -fsSL -o monolith https://github.com/Y2Z/monolith/releases/download/v2.11.6/monolith-cli-linux-x86_64 && echo "680f11831e5e0de4be6a17cbb1ce2542b8536bc50f7dd83a12cfd2a4e63c25c7 monolith" | sha256sum -c - && sudo install -m 755 monolith /usr/local/bin/monolith (Файл для x86_64, 8 216 768 байт. Сумма sha256 взята из поля digest у файла выпуска на GitHub, отдельного файла сумм в выпуске нет. Для aarch64 и armhf в выпуске свои файлы с другими суммами. Мы ставили так от root, без sudo. Зависимостей программа не просит: кроме libc, libm и libgcc_s, ldd ничего не показал.)
4. Установи по согласованному плану. Если что-то идёт не так, как в плане, остановись и спроси.
5. Проверь результат:
- monolith -V: программа запускается без ошибки;
- Во временной папке собери тестовую страницу с картинкой, стилями, файлом из @import, картинкой фона в CSS и скриптом и раздай её с 127.0.0.1:8000. Сохрани страницу одним файлом без скриптов с ключами -j -I -D и обычным запуском. Проверь, что ресурсы встроены и совпадают с исходными, что в файле нет кода скриптов и стоит правило Content-Security-Policy. Посмотри код выхода на картинке с ответом 404 и на пути в несуществующую папку, убедись, что исходные файлы не изменились. Делай это во временной папке и не трогай мои файлы.
mkdir -p /work/dl && cd /work/dl && curl -fsSL -o monolith https://github.com/Y2Z/monolith/releases/download/v2.11.6/monolith-cli-linux-x86_64
echo "680f11831e5e0de4be6a17cbb1ce2542b8536bc50f7dd83a12cfd2a4e63c25c7 monolith" | sha256sum -c -
install -m 755 monolith /usr/local/bin/monolith
monolith -V
mkdir -p /work/site/img && cd /work/site
python3 -c "import zlib,struct;c=lambda t,d:struct.pack('>I',len(d))+t+d+struct.pack('>I',zlib.crc32(t+d));p=lambda w,h,r,f:open(f,'wb').write(b'\x89PNG\r\n\x1a\n'+c(b'IHDR',struct.pack('>IIBBBBB',w,h,8,2,0,0,0))+c(b'IDAT',zlib.compress((b'\x00'+bytes(r)*w)*h))+c(b'IEND',b''));p(120,60,(200,30,30),'img/logo.png');p(40,40,(30,30,200),'img/bg.png');p(16,16,(30,200,30),'favicon.ico')"
printf '<!DOCTYPE html>\n<html lang="ru"><head><meta charset="utf-8"><title>Тестовая страница</title>\n<link rel="stylesheet" href="style.css">\n<script src="app.js"></script>\n</head><body>\n<h1 class="title extra-marker">Тестовая страница с формой заявки</h1>\n<p>Русский текст для проверки кодировки: съешь же ещё этих мягких французских булок.</p>\n<img src="img/logo.png" alt="логотип" width="120" height="60">\n<a href="about.html">О проекте</a>\n<script>window.INLINE_MARKER = 2;</script>\n<noscript><p>NOSCRIPT_MARKER</p></noscript>\n</body></html>\n' > index.html
printf '@import "extra.css";\nbody { background: url("img/bg.png"); font-family: sans-serif; }\n.title { color: #333; }\n' > style.css
printf '.extra-marker { border: 1px solid #c00; }\n' > extra.css
printf 'window.APP_JS_MARKER = 1; document.title = document.title;\n' > app.js
printf '<!DOCTYPE html><html><head><meta charset="utf-8"><title>Нет картинки</title></head><body><img src="img/nope.png"></body></html>\n' > missing.html
sha256sum index.html style.css extra.css app.js favicon.ico img/logo.png img/bg.png > /work/src.sum
python3 -m http.server 8000 --bind 127.0.0.1 --directory /work/site > /work/http.log 2>&1 & srv=$!; sleep 2
mkdir -p /work/save; cd /work/save || exit 1
monolith -j -I -D http://127.0.0.1:8000/index.html -o archive/page.html
grep -o 'Content-Security-Policy" content="[^"]*"' archive/page.html
grep -c 'съешь же ещё этих мягких французских булок' archive/page.html
monolith http://127.0.0.1:8000/index.html -o page.html
monolith http://127.0.0.1:8000/missing.html -o missing.html; echo "код $?"
monolith -q http://127.0.0.1:8000/index.html -o nodir/page.html; echo "код $?"
kill $srv
cd /work/site && sha256sum -c /work/src.sum
rm /usr/local/bin/monolith
- если ты работаешь в папке моего проекта, покажи git status: от установки в проекте не должно появиться изменений.
6. Итог одним сообщением: что установлено, какой версии и куда, сколько места заняло, что поменялось в системе и как всё удалить (macOS, Homebrew: brew uninstall monolith; Windows, файл monolith-cli.exe с GitHub: Remove-Item -Recurse $env:LOCALAPPDATA\Monolith; Linux, готовый файл с GitHub: sudo rm /usr/local/bin/monolith).
Если на любом шаге ошибка, не чини наугад: покажи текст ошибки и скажи, что, по-твоему, случилось. Частые проблемы: https://smyslokod.ru/cli/monolith#problemyПромпт собран из официальных инструкций, сверенных 19.10.2026. Агент сначала проверит, что уже стоит, покажет план с местом на диске и способом удаления и без твоего «да» ничего не поставит.
Как ставят вручную
Способы из официальных источников, у каждого ссылка на первоисточник.
macOS · Homebrew · источник
brew install monolith
Команду даёт README проекта. Формула monolith в Homebrew - эта программа, описание формулы «CLI tool for saving complete web pages as a single HTML file». brew install мы не запускали.
Windows · файл monolith-cli.exe с GitHub · источник
New-Item -ItemType Directory -Force $env:LOCALAPPDATA\Monolith | Out-Null; Invoke-WebRequest -Uri https://github.com/Y2Z/monolith/releases/download/v2.11.6/monolith-cli.exe -OutFile $env:LOCALAPPDATA\Monolith\monolith.exe; (Get-FileHash $env:LOCALAPPDATA\Monolith\monolith.exe).Hash
Файл 5 486 592 байт. Сверь выведенную сумму с AF9A6E1C6E245F94397B1544C89041F837B79B45BAD93454C1F7A658CAC68383: так записано в поле digest у файла выпуска. Папку нужно добавить в PATH или звать программу по полному пути. На Windows мы не проверяли.
Linux · готовый файл с GitHub · источник
curl -fsSL -o monolith https://github.com/Y2Z/monolith/releases/download/v2.11.6/monolith-cli-linux-x86_64 && echo "680f11831e5e0de4be6a17cbb1ce2542b8536bc50f7dd83a12cfd2a4e63c25c7 monolith" | sha256sum -c - && sudo install -m 755 monolith /usr/local/bin/monolith
Файл для x86_64, 8 216 768 байт. Сумма sha256 взята из поля digest у файла выпуска на GitHub, отдельного файла сумм в выпуске нет. Для aarch64 и armhf в выпуске свои файлы с другими суммами. Мы ставили так от root, без sudo. Зависимостей программа не просит: кроме libc, libm и libgcc_s, ldd ничего не показал.
Как удалить
- macOS, Homebrew:
brew uninstall monolith - Windows, файл monolith-cli.exe с GitHub:
Remove-Item -Recurse $env:LOCALAPPDATA\Monolith - Linux, готовый файл с GitHub:
sudo rm /usr/local/bin/monolith
Что нужно для работы
Отдельных зависимостей нет.
Системы
- macOS - через Homebrew. Готовые сборки формулы есть для Mac на Apple Silicon. На Intel brew соберёт программу из исходников с Rust. На Mac мы не проверяли.
- Linux - готовые файлы выпуска для x86_64, aarch64 и armhf. Мы проверяли Ubuntu 24.04 на x86_64. Файлу для x86_64 нужна glibc 2.34 или новее.
- Windows - готовый файл monolith-cli.exe в выпуске на GitHub, установщика нет. На Windows мы не проверяли.
Где запускать
Ставить нужно туда, где работает агент: на твой компьютер, сервер или в контейнер.
- На компьютере - сохранить страницу для себя или передать её человеку без доступа к сайту.
- На сервере - например, сохранять копии своих страниц по расписанию.
- В контейнере - мы проверяли в контейнере Ubuntu 24.04 от root.
Сколько ресурсов нужно
- Место на диске
- Готовый файл для Linux x86_64 - 8 216 768 байт, monolith-cli.exe для Windows - 5 486 592 байт. Сколько займёт установка через Homebrew, мы не мерили. Сохранённая страница обычно больше исходного HTML: картинки внутри файла записаны в base64.
- Память
- Отдельно не мерили.
- Сеть
- Программа скачивает саму страницу и её ресурсы (стили, картинки, скрипты, шрифты) оттуда, где они лежат, в том числе со сторонних сайтов. Обычные ссылки на другие страницы она не открывает. По исходному коду она качает до 30 ресурсов одновременно и ждёт каждый до 120 секунд. В нашем прогоне задача ходила только к тестовому серверу 127.0.0.1:8000. При установке были соединения с github.com (140.82.121.3, порт 443) и release-assets.githubusercontent.com (185.199.108.133-185.199.111.133, порт 443), DNS контейнера - 127.0.0.11. Доступ из России мы не проверяли.
Скачивание и проверка суммы заняли меньше секунды. Тестовую страницу программа сохранила за 186 мс вместе с запуском записи соединений.
Лицензия и платные замены
Лицензия CC0-1.0. Авторы передали программу в общественное достояние: пользоваться, менять и распространять можно без условий, в том числе в работе. Гарантий авторы не дают. Текст лицензии
Цена: Бесплатно. Бесплатно, общественное достояние (CC0-1.0).
Платные замены
Платную замену мы не указываем: тарифы платных сервисов сохранения страниц мы не сверяли.
Бесплатные замены
- SingleFile - По описанию проекта сохраняет страницу целиком в один HTML-файл. Это расширение для Chrome, Firefox, Edge, Safari, Яндекс Браузера и других, у проекта есть и консольная версия, лицензия AGPL-3.0.
О чём помнить
- Безопасность. Агент запускает monolith в терминале сам (exec). Программа читает страницу по адресу или файл с диска, а у страницы с диска встраивает и файлы, на которые она ссылается через file:// (read). В прогоне так в копию попал тестовый текстовый файл. У страницы, скачанной по сети, ссылку file:// программа не встраивает и пишет «security error». Результат она пишет по пути из -o с правами пользователя и заменяет файл с тем же именем без вопроса (write). При сохранении по адресу программа обращается к сайту страницы и к сторонним адресам её ресурсов, если ключи -d, -B и ключи исключения (-i, -c, -j и другие) их не закрыли (acts). Для страницы по http или https без ключа -i она ещё запрашивает /favicon.ico с её сайта, если значок не указан в самой странице. Ключ -k по справке отключает проверку сертификатов, -C подставляет куки из файла.
- Без ключа -j скрипты страницы остаются в файле и выполнятся, когда копию откроют в браузере. Для архива и передачи чужих страниц ставь -j и -I.
- Своего движка JavaScript у программы нет. Страница, которая догружает данные скриптом после открытия, сохранится без них. README предлагает сначала получить готовую разметку из Chromium с --dump-dom и передать её программе, этот путь мы не проверяли.
- Если ресурс не скачался, например сервер ответил 404, программа выходит с кодом 0 и оставляет в файле ссылку на этот адрес. Без сети этого ресурса в копии не будет. Ключ -e встраивает вместо ресурса ответ сервера: в прогоне это была страница ошибки 404. Сообщения об ошибках ресурсов программа печатает в stderr.
- В начало файла программа пишет комментарий со временем сохранения и адресом страницы, если она пришла по http или https. По исходному коду логин и пароль из адреса в этот комментарий не попадают. Для файла с диска вместо адреса стоит «local source». Ещё она добавляет тег robots со значением none. Комментарий убирает ключ -M.
- Когда программа выходит с кодом 1, в /tmp остаётся файл кэша monolith-* размером 20 480 байт: в прогоне их было четыре, по числу запусков с ошибкой. Успешные запуски таких файлов не оставили.
Частые проблемы
Error: cannot write to '...': directory '...' does not exist (use --create-dirs to create it), код 1
Папки из пути -o ещё нет. Создай папку заранее или добавь ключ -D.
Error: could not retrieve target document, код 1
Сама страница не скачалась: сервер недоступен или домен страницы не входит в список -d. Проверь адрес, например curl -I, и добавь домен страницы в -d.
В сохранённом файле остались ссылки http на картинки или стили, код 0
Ресурс не скачался или его домен закрыт ключами -d и -B. Причина видна в stderr, например «(404 Not Found)» или «(domain not allowed)». Проверь адрес ресурса и список доменов, повтори сохранение.
Проверка
✓ Проверено 19.10.2026: Ubuntu 24.04 в одноразовом контейнере Docker на сервере, от root: Monolith 2.11.6 готовым файлом monolith-cli-linux-x86_64 с GitHub, тестовая страница на python3 -m http.server по адресу 127.0.0.1:8000.
- Когда
- 19.10.2026
- Среда
- Ubuntu 24.04 в одноразовом контейнере Docker на сервере, от root: Monolith 2.11.6 готовым файлом monolith-cli-linux-x86_64 с GitHub, тестовая страница на python3 -m http.server по адресу 127.0.0.1:8000
- Объём
- Установили и прогнали задачу на тестовых данных
- Что именно сделали
- Одноразовый контейнер Ubuntu 24.04 без данных и ключей, monolith в нём не было. Скачали monolith-cli-linux-x86_64 выпуска v2.11.6 с GitHub (8 216 768 байт), sha256sum -c сверила сумму из выпуска, install -m 755 положил файл в /usr/local/bin. monolith -V вывела monolith 2.11.6.
- Скрипт сам собрал тестовую страницу: заголовок, русский текст, картинка logo.png, style.css с @import extra.css и фоном bg.png, app.js, встроенный скрипт, значок favicon.ico и ссылка about.html. Страницу раздавал python3 -m http.server на 127.0.0.1:8000. Суммы sha256 исходных файлов записали.
- monolith http://127.0.0.1:8000/index.html -o /work/save/page.html вернула код 0 и файл 1 805 байт. Скрипт проверил: logo.png, favicon.ico и bg.png из CSS встроены, суммы sha256 совпали, extra.css лежит внутри стилей, app.js переписан текстом в тег script, ссылок на исходные файлы не осталось.
- Сценарий примера: monolith -j -I -D http://127.0.0.1:8000/index.html -o archive/page.html создала папку archive и файл 1 849 байт, код 0. Теги script пустые, в файле правило Content-Security-Policy default-src 'unsafe-eval' 'unsafe-inline' data:; script-src 'none';, логотип, стили и фон встроены, русский текст на месте.
- Проверили -M (нет комментария с адресом), -m (MHTML), -o с %title%, чтение из стандартного ввода с -b. С -d 127.0.0.1 и с -B -d localhost картинка с localhost в файл не попала и осталась ссылкой. Путь в несуществующую папку без -D дал код 1, папка не появилась. Файл с тем же именем программа заменила без вопроса.
- Картинка с ответом 404 дала код 0 и ссылку на неё в файле, с -e встроился ответ сервера с ошибкой. Для адреса по сети ссылка file:// дала «security error», и файл в копию не попал. Тот же HTML, открытый с диска, этот файл встроил. Остановленный сервер дал код 1. После четырёх запусков с кодом 1 в /tmp осталось четыре файла monolith-*, после успешных - ни одного.
- Задача обращалась только к 127.0.0.1:8000, при установке были github.com и release-assets.githubusercontent.com. Исходные файлы сайта не изменились, sha256sum -c прошла. Удалили командой rm /usr/local/bin/monolith, после hash -r команды monolith нет.
- Отдельно все 23 команды taskCommands карточки выполнили подряд в одной оболочке с чистого места, каждая завершилась с кодом 0. Все проверки скрипт делал сам и только после них печатал TASK_OK.
| Дата | Версия | Объём | Где | Итог |
|---|---|---|---|---|
| 19.10.2026 | 2.11.6 | задача | контейнер, Linux | получилось |
«Проверено» ставим, только когда сами поставили программу и прогнали её на задаче. Сверка ссылок и вывод версии так не называются.
Похожие программы
Программу делают её авторы. Мы сверяем официальные источники и описываем, что ей нужно, но код остаётся чужим. Перед установкой посмотри план агента: что он поставит и что поменяет в системе.