molab позволяет собрать в браузере записную книжку с кодом, расчётами и графиками. Ниже — первый отчёт по рекламным каналам: вы загрузите учебные данные, посчитаете цену заявки и добавите фильтры, которые пересчитывают результат.
Проверено по официальным источникам 10 октября 2026 года. Локально в marimo 0.25.1 проверены расчёты на Python и SQL, построение графика и экспорт HTML. Облачную сессию, выдачу графического ускорителя (GPU) и подключение агента к molab не тестировали.
Сначала проверьте доступ и видимость данных
Записные книжки molab публичны по ссылке, хотя по умолчанию не обнаруживаются в каталоге. Получатель ссылки может увидеть статический просмотр и создать свою копию. Отсутствие в каталоге не даёт приватности.
Используйте вымышленные или открытые данные, разрешённые к распространению. Не помещайте в код ключи доступа, клиентские списки и закрытые выгрузки. Отдельная гарантия приватности прикреплённых файлов в изученной документации не найдена: не рассчитывайте на неё.
Условия использования запрещают загружать чувствительные данные, включая медицинские сведения, номера банковских счетов и документов. Условия использования ссылаются на политику приватности CoreWeave. Эти документы описывают обработку данных; они не делают публичную записную книжку закрытой.
Что такое marimo, molab и записная книжка
marimo — открытая система записных книжек для Python. Её можно запускать на своём компьютере. molab — облачный сервис команды marimo: редактор открывается в браузере, а Python работает на удалённом сервере. Это разные уровни одной системы.
| Вариант | Где выполняется код | Формат и порядок расчётов |
| marimo локально | Ваш компьютер или выбранный вами сервер | Файл Python; зависимости между ячейками определяют порядок |
| molab | Облачная среда marimo | Та же модель записной книжки marimo |
| Jupyter | Зависит от установленной среды и сервера | Обычно файл .ipynb; состояние зависит от выполненных ячеек |
| Google Colab | Облачная среда Google | Формат Jupyter .ipynb; порядок расчётов как в Jupyter. Записные книжки хранятся в Google Drive |
Реактивный пересчёт: почему меняется весь отчёт
В marimo одна ячейка определяет переменную, например data, другая читает её и создаёт сводку, третья строит график по сводке. Редактор видит эту цепочку. Когда вы запускаете изменённую ячейку с данными, зависимые ячейки пересчитываются автоматически в обычном режиме.
Порядок определяют зависимости, поэтому расположение ячеек на странице не заменяет логику расчётов. Изменение выпадающего списка или ползунка тоже передаёт новое значение в Python.
У этой модели есть правила. Глобальное имя определяется в одной ячейке; повторное определение data в другой вызовет ошибку. Изменения внутри объекта, например data["x"] = ... в соседней ячейке, не отслеживаются как новая зависимость. Создавайте новый результат в новой переменной. Для дорогих расчётов есть отложенный режим: он отмечает устаревшие результаты, пока вы сами не запустите пересчёт.
Основные возможности
| Задача | Средство | Наблюдаемый результат |
| Прочитать CSV и проверить колонки | Python и библиотека pandas | Таблица и проверки исходных значений |
| Сгруппировать строки | Python или SQL | Сводка, которую можно сверить с исходником |
| Показать различия | Matplotlib, Altair и другие библиотеки | График рядом с расчётом |
| Изменить параметры отчёта | Выпадающий список, ползунок, форма | Пересчёт зависимых таблиц и графиков |
| Передать результат | Исходный файл, HTML, PDF, ссылка | Код для повторения либо готовый снимок отчёта |
| Доработать с агентом | Официальный навык marimo pair | Агент читает и меняет работающую записную книжку |
SQL-ячейки работают с таблицами Python через DuckDB. Запрос возвращает таблицу, доступную следующим ячейкам; подключать внешнюю базу для первого примера не требуется. Для графиков подходят привычные библиотеки Python; реакцию графика на фильтр обеспечивает связь ячеек.
Тарифы, GPU и ограничения
На дату проверки официальный справочник называет molab бесплатным. Анонс от 1 июня 2026 года описывает бесплатный публичный предварительный доступ при разумном использовании. Это условия на дату источников; обещания бесплатного доступа навсегда нет. Публичную платную тарифную сетку для обычного molab в проверенных источниках не нашли.
| Ресурс | Что заявлено официально | Что учитывать |
| Процессор и память | 4 CPU, 32 ГБ оперативной памяти на записную книжку | Параметры сервиса могут меняться |
| GPU | NVIDIA RTX Pro 6000 Blackwell, 96 ГБ видеопамяти | Включается через кнопку характеристик в заголовке; фактическая выдача здесь не проверялась |
| Сессия | До 12 часов; остановка после более 90 минут простоя | Сохраняйте результат до завершения |
| Хранение | Ограниченный объём постоянного хранилища | Публичных точных квот и срока хранения в изученном справочнике нет |
Общие условия использования Marimo (редакция от 22 сентября 2022 года, то есть до запуска molab с GPU) предоставляют сервис «как есть» и по доступности, без соглашения об уровне обслуживания. Цены могут меняться; действующих клиентов обещают уведомить минимум за 30 дней. Заявленную возможность включить GPU нельзя считать гарантией свободного устройства или непрерывной сессии.
molab рассчитан на интерактивные вычисления в редакторе. За фоновые задания, управление через SSH или замену редактора другим интерфейсом сервис может остановить записную книжку без предупреждения. Майнинг, открытие вычислений для внешнего трафика через прокси и перепродажа ресурсов считаются злоупотреблением: за них аккаунт могут заблокировать без уведомления. Поэтому постоянно работающего бота или сервер для клиентов планируйте в другой среде.
Для отчёта ниже GPU не нужен.
Первый отчёт: цена заявки по каналам
Данные вымышлены. Учебный CSV — текстовый файл: первая строка называет колонки, остальные содержат данные; поля разделены запятыми. Расход указан в рублях; leads — число заявок. Задача: сравнить каналы за два месяца и отобрать те, у которых цена заявки укладывается в выбранный порог.
1. Откройте среду
Если условия molab позволяют вам пользоваться сервисом, откройте molab, выберите Create a notebook и выполните предложенный вход. Процедура входа здесь не проверялась: изучали публичный интерфейс без аккаунта.
Локальный вариант: установите Python 3.10 или новее, создайте отдельную папку и окружение. Команды ниже — для macOS/Linux:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "marimo==0.25.1" pandas matplotlib duckdb sqlglot
marimo edit molab_demo.pyВ открывшемся редакторе создавайте по одной Python-ячейке для каждого блока ниже.
В molab используйте встроенный менеджер пакетов, если импорт или SQL сообщает о недостающей зависимости. Для этого примера нужны pandas, matplotlib, duckdb и sqlglot.
2. Подключите библиотеки
Первая ячейка:
import marimo as mo
import pandas as pd
import matplotlib.pyplot as plt
from io import StringIOЗапустите её, затем добавьте следующую. Имя mo даёт доступ к тексту и интерактивным элементам marimo; pd — к обработке таблиц.
3. Прочитайте CSV
Чтобы первый запуск не зависел от загрузки файлов, поместите небольшой CSV прямо в ячейку:
csv_text = """month,channel,spend,leads
2026-08,Поиск,30000,60
2026-08,Соцсети,20000,80
2026-08,Рассылка,5000,50
2026-09,Поиск,36000,72
2026-09,Соцсети,24000,96
2026-09,Рассылка,6000,60"""
data = pd.read_csv(StringIO(csv_text))
assert set(data.columns) == {"month", "channel", "spend", "leads"}
assert not data.isna().any().any()
assert (data["spend"] >= 0).all() and (data["leads"] > 0).all()
dataДолжны появиться шесть строк. Проверки остановят этот пример при пропусках, отрицательном расходе или нуле заявок. Для настоящих данных заранее решите, как учитывать канал без заявок; его цену нельзя вычислить обычным делением.
Для работы со своим CSV загрузите разрешённый к распространению файл через значок файлов в боковой панели molab. В существующей ячейке замените строку чтения на data = pd.read_csv("имя_файла.csv"), подставив фактический путь из дерева файлов. Для этого примера нужны колонки month, channel, spend и leads. Вторую ячейку с новым определением data создавать не нужно.
4. Добавьте фильтры
period = mo.ui.dropdown(
options=["Все", "2026-08", "2026-09"], value="Все", label="Месяц"
)
max_cpl = mo.ui.slider(
start=100, stop=1000, step=50, value=1000,
label="Предельная цена заявки, ₽"
)
mo.hstack([period, max_cpl])Эта ячейка создаёт элементы управления. Их значения читайте в другой ячейке через .value; так формируется зависимость между управлением и расчётом.
5. Соберите сводку и показатели
filtered = data if period.value == "Все" else data[
data["month"] == period.value
]
summary = filtered.groupby("channel", as_index=False).agg(
spend=("spend", "sum"), leads=("leads", "sum")
)
summary = summary.assign(cpl=summary["spend"] / summary["leads"])
selected = summary[summary["cpl"] <= max_cpl.value].sort_values("cpl")
selectedЦена заявки — сумма расходов канала, делённая на сумму его заявок. Среднее арифметическое цен отдельных строк даст другой показатель и может исказить сравнение.
В следующей ячейке покажите итог только по каналам, прошедшим фильтр:
total_spend = selected["spend"].sum()
total_leads = selected["leads"].sum()
total_cpl = total_spend / total_leads if total_leads else None
_cpl_text = f"{total_cpl:.2f} ₽" if total_cpl is not None else "нет заявок"
mo.vstack([
mo.md(f"Расход: **{total_spend:,.0f} ₽** · Заявки: **{total_leads}**"
f" · Цена заявки: **{_cpl_text}**"),
mo.ui.table(selected.round({"cpl": 2}), selection=None),
])Если выборка пуста, показатель покажет «нет заявок» вместо нулевой цены.
6. Постройте график
_fig, _ax = plt.subplots(figsize=(7, 3))
_ax.bar(selected["channel"], selected["cpl"], color="#64a9dc")
_ax.set_ylabel("Цена заявки, ₽")
_ax.set_title("Каналы в выбранном месяце и пороге")
_fig.tight_layout()
_figУменьшите порог до 300 ₽. В таблице и на графике должны остаться «Соцсети» и «Рассылка». При обычном автоматическом режиме вручную запускать каждую следующую ячейку не требуется.
Проверка результата
| Выбор | Расход | Заявки | Цена заявки |
| Все месяцы, порог 1000 ₽ | 121 000 ₽ | 418 | 289,47 ₽ |
| Все месяцы, порог 300 ₽ | 55 000 ₽ | 286 | 192,31 ₽ |
| Сентябрь, порог 1000 ₽ | 66 000 ₽ | 228 | 289,47 ₽ |
Для всех месяцев цены по каналам: «Поиск» — 500 ₽, «Соцсети» — 250 ₽, «Рассылка» — 100 ₽. Сверьте хотя бы один канал вручную: для поиска (30000 + 36000) / (60 + 72) = 500.
Тот же расчёт через SQL
Добавьте Python-ячейку с вызовом mo.sql или используйте SQL-ячейку редактора:
sql_summary = mo.sql(
"""
SELECT channel, SUM(spend) AS spend, SUM(leads) AS leads,
SUM(spend) * 1.0 / SUM(leads) AS cpl
FROM filtered
GROUP BY channel
ORDER BY cpl
""",
output=False
)
sql_summaryЗапрос читает filtered, поэтому реагирует на месяц. Он показывает все каналы выбранного месяца: порог ползунка в этом запросе не применяется. Сверяйте SQL со сводкой summary, а не с отфильтрованной таблицей selected. Суммы в результате SQL могут показываться с дробной частью, например 11000.0: так DuckDB передаёт тип суммы в таблицу pandas, значения совпадают.
Сохранение, экспорт и совместная работа
Скачайте каталог записной книжки кнопкой загрузки в верхней части molab. Храните исходный файл Python и используемые данные вместе. Команда marimo edit <URL> скачивает только файл записной книжки, без прикреплённого хранилища; для полного переноса это существенно.
Между сессиями сохраняются только файлы, загруженные через боковую панель, и постоянный кэш mo.persistent_cache. Файл, который код создал во время сессии, после её остановки не сохранится. Ограничения размера и срока хранения кэша сервис может менять; держите свою копию исходников и данных. Для внешнего хранения molab поддерживает Google Drive, Hugging Face и S3-совместимые хранилища.
Для передачи снимка отчёта экспортируйте его из меню в HTML или PDF. Статический HTML и PDF фиксируют результат; фильтры, которым нужен Python, в них не пересчитываются. Локальный экспорт HTML:
marimo export html molab_demo.py -o molab_demo.htmlЭта команда запускает код заново. Перед экспортом проверьте, что ячейки не вызывают платные API и не меняют внешние системы. Экспорт в PDF входит в заявленные возможности molab. Для экспорта в PDF на своём компьютере могут понадобиться дополнительные зависимости: их перечисляет руководство по экспорту.
Для интерактивного просмотра предусмотрены ссылки на приложение (Run as app) и слайды. Совместная работа по обычной ссылке означает просмотр и создание копии; одновременное редактирование одной книжки несколькими людьми в изученных источниках не подтверждено.
При синхронизации с GitHub источником служит файл в репозитории: изменения в GitHub отражаются в molab. Не считайте эту возможность двусторонней синхронизацией. Встроить интерактивную книжку в свою страницу можно через WebAssembly: код вставки (iframe) берётся из WebAssembly-превью книжки, синхронизированной с GitHub, либо собирается из исходного кода. Python при этом выполняется в браузере посетителя, поэтому подходят только совместимые пакеты.
Подключение Codex или Claude Code через marimo pair
Этот сценарий актуален: официальный marimo pair позволяет агенту читать переменные, выполнять и изменять ячейки, проверять логику и управлять элементами интерфейса. Это доступ к работающей среде и её данным. Начните с учебной копии и ограничьте задачу агента.
Подготовьте установленный Codex CLI или Claude Code с вашим разрешённым способом доступа. Установите официальный навык локально командой из документации:
npx skills add marimo-team/marimo-pairДля npx нужен Node.js. Без него документация предлагает вариант через uv: uvx deno -A npm:skills add marimo-team/marimo-pair.
- Запустите записную книжку molab. В меню действий справа сверху выберите
Pair with an agent. - Скопируйте инструкцию подключения, которую показывает ваша текущая сессия, в выбранный агент. Не публикуйте её в статье, репозитории или скриншоте.
- После подключения дайте ограниченную задачу ниже.
- Проверьте, что агент видит шесть строк и изменил ожидаемую ячейку; повторите контрольные суммы из примера.
Промпт:
Работай с учебной записной книжкой через marimo pair.
Сначала покажи имена колонок и число строк. Данные вымышлены.
В файле уже есть выбор месяца, порог цены и график.
Добавь отдельный фильтр по каналу и сохрани нынешние фильтры.
Не определяй data второй раз: используй существующую таблицу.
Считай цену как сумму расходов, делённую на сумму заявок.
При выборе всех месяцев и каналов с порогом 1000 проверь
расход 121000 и 418 заявок. Для канала «Соцсети» проверь
расход 44000, 176 заявок и цену заявки 250.
Объясни, какие ячейки изменил и как проверить их результат.
Не подключай внешние сервисы, не используй платные API,
не загружай другие файлы и не публикуй записную книжку.Для локального файла документация показывает команду агенту /marimo-pair pair with me on my_notebook.py; подставьте molab_demo.py. Облачную инструкцию подключения берите из интерфейса molab, не составляйте адрес и параметры самостоятельно. Стоимость и лимиты вашего агента определяет его провайдер; бесплатность molab их не отменяет.
Встроенная помощь ИИ — отдельная возможность molab: в текущем справочнике заявлен доступ к открытым моделям без своего API-ключа. Она не равна подключению вашего Codex или Claude Code.
Полезные сценарии
| Задача и вход | Что сделать | Проверяемый результат | Ограничение |
| Разобрать разрешённый к публикации CSV с рекламными расходами | Проверить колонки, сгруппировать строки, добавить фильтр месяца | Суммы сходятся с CSV; видно цену заявки по каналам | Неполные данные и качество заявок требуют отдельной проверки |
| Подготовить учебный отчёт или калькулятор бюджета | Взять агрегаты; добавить ползунок бюджета и формулу «бюджет / цена заявки» | Для 10 000 ₽ и цены 250 ₽ получается 40 расчётных заявок | Это сценарная оценка; эффективность рекламы не обязана оставаться постоянной |
| Провести эксперимент с агентом | Подключить marimo pair к синтетической копии; попросить один новый фильтр | Видна правка ячеек и повторяемые контрольные результаты | Агент может ошибаться; доступные ему данные и внешние вызовы нужно ограничивать |
Для закрытого рабочего отчёта выбирайте локальный marimo или согласованную инфраструктуру. Для круглосуточной автоматизации нужен управляемый сервер: интерактивная сессия molab с ограниченным сроком не даёт такого режима.
Что делать при ошибках
| Симптом | Что проверить | Следующее действие |
ModuleNotFoundError | Название недостающего пакета | Установить его через менеджер molab либо в локальное окружение; для SQL проверить также sqlglot |
FileNotFoundError | Имя и путь в дереве файлов | Исправить путь в существующей ячейке чтения |
Multiple definitions | Повторное глобальное имя в разных ячейках | Оставить одно определение; дать новому результату другое имя |
| График не меняется | Читает ли он selected; включён ли автоматический режим | Исправить зависимость или выполнить помеченные устаревшими ячейки |
| Неверная цена заявки | Сумма расходов и сумма заявок; нули, пропуски, дубли | Сверить исходные строки; не усреднять цены строк без обоснования |
| Нет GPU или доступ остановлен | Характеристики сессии и условия сервиса | Сохранить доступные результаты; использовать разрешённую альтернативную среду |
Официальные ссылки
- molab: публичный каталог и вход.
- Справочник molab и его исходник в GitHub.
- Анонс molab с GPU от 1 июня 2026 года.
- Ограничения molab, условия использования и политика приватности CoreWeave.
- Репозиторий marimo и быстрый старт.
- Реактивный пересчёт и интерактивные элементы.
- SQL в marimo и построение графиков.
- Характеристики среды molab и установка пакетов.
- Хранилище molab, скачивание и локальный запуск, обмен записными книжками.
- Экспорт в HTML и экспорт в PDF.
- marimo pair: подключение агента и встроенная помощь ИИ в molab.
- Официальный FAQ Google Colab и документация Jupyter.
- Ответы на частые вопросы о molab и сообщество marimo.
Следующий шаг
Чтобы повторить сценарий с агентом, разберитесь с установкой и вызовом навыков: Skills и Plugins в Codex App: установка, использование и создание своих.
Если вы готовите отчёты вместе с агентом, полезно заранее определить доступные ему данные, правила расчётов и способ проверки результата.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov


