Я впервые воспользовался Roam шесть лет назад, в конце 2020 года. Примерно тогда же — вскоре после выхода GPT-3 — я написал пост Социальная информационная платформа будущего о том, как модели GPT-n изменят мир. Как ни удивительно, в основном я оказался прав — а кое в чём ошибся весьма любопытным образом.

И мир действительно изменился. Roam — прекрасная среда для мышления, и я представлял, что со временем он может даже стать основой для всего веба, в духе Xanadu. Реальность сильно не дотянула до этих ожиданий. Но я по-прежнему полон энтузиазма — во многом благодаря тем самым моделям GPT-n: думаю, у Roam есть потенциал стать лучшей средой для совместного мышления агентов и людей.

Составлять этот план развития было увлекательно, особенно теперь, когда я смотрю со стороны (раньше я проработал в Roam почти год), и с учётом отношения Roam к планам развития :) Надеюсь, что либо сам сделаю плагины для каких-то из этих вещей, либо соблазню команду реализовать их самостоятельно…

Улучшение того, что уже есть

  1. Более удобные средства работы с визуальными компонентами высокого уровня
    • В Roam есть визуальные компоненты вроде table и kanban, построенные из базовых блоков. После недавнего обновления таблиц их больше не нужно прописывать вручную; можно сортировать столбцы и так далее.
      • Канбанам не помешало бы такое же внимание:
        • Пустые таблицы сейчас выглядят так:
        • А пустые канбаны — вот так:
        • Некоторые проблемы:
          • Элементы канбана не охватывают вложенные блоки, только карточки (например, блок, вложенный в карточку, не виден).
          • Канбаны не занимают всю доступную ширину.
          • Навигация с клавиатуры реализована не полностью — нельзя легко перейти к следующему столбцу, выбрать карточку через Esc или выделить весь столбец.
          • У агентов тоже нет высокоуровневых средств работы с большинством компонентов вроде таблиц и канбанов, и вместо этого им приходится работать на уровне блоков.
          • Не хватает многих возможностей канбана: сортировки, перемещения столбцов, фильтрации и поиска по канбану (это частный случай более общей функции, которая должна существовать: сохраняемых фильтров на уровне блоков).
      • Запросам тоже не помешало бы внимание :(
  2. Более удобная публикация содержимого Roam, в частности возможность создавать статические сайты и улучшенное SEO для публикуемых графов Roam.
    • Готов поспорить, что сейчас команда Roam может очень дёшево реализовать генерацию статических сайтов и улучшения SEO, поручив это агенту типа GPT-5.5 / Fable и просто попросив его повторять попытки, пока поведение по большей части не воспроизведёт веб-приложение. Именно по этой причине я на 90% и публикую свои материалы на quartz (и пользуюсь Obsidian). Раньше сообщество уже предпринимало такие попытки, но, насколько мне известно, никто так и не сделал актуальную версию, с которой всё работало бы без лишних хлопот.
  3. Улучшения представления графа
    • Здесь слишком много простых возможностей для улучшения — на их описание ушёл бы целый день, — но представление графа может быть намного, намного полезнее.
      • Семантическое расположение узлов, а не только по явным ссылкам.
        • Теперь, когда у нас есть векторные представления, можно в какой-то мере располагать узлы по сходству и накладывать поверх связи. А ещё можно раскрашивать кластеры по темам или как-то похоже…
        • Вот пример представления графа, которое я сделал для экспортированных данных Twitter, чтобы было понятнее:
      • Время как ось графа.
      • Полноценные поиск, фильтрация и запросы в представлении графа.
      • Уровень детализации / разные масштабы / приближение и отдаление.
    • Для сравнения: вот как это выглядит сейчас:
  4. Сделать высокоуровневые возможности сочетаемыми
    • Можно ли сделать полноценную встроенную поддержку фрактальных канбанов?
    • Можно ли использовать канбаны, таблицы и запросы как входные данные для других компонентов?
  5. Более качественный экспорт
    • Пользователи Roam часто пишут о чём-то за пределами страницы, посвящённой этому предмету. Например, я могу писать о [[People/Charles Darwin]] на странице под названием [[Evolution]]. Но если экспортировать граф в markdown, то при открытии Charles Darwin.md там ничего не будет.
      • Очевидное решение — добавлять в экспорт каждой страницы раздел с упоминаниями, который содержал бы хотя бы их количество, страницы, на которых они встречаются, тексты блоков и так далее.
    • Можно было бы сделать предварительный просмотр экспорта, экспорт в pdf, встроенную кнопку печати и так далее…
  6. Объединить запросы, фильтрацию и поиск
    • Работу с фильтрами в целом можно значительно улучшить.
    • Если задуматься, это очень похожие способы работы, и их часто нужно использовать вместе в схожих частях интерфейса.
      • В чём разница?
        • Запрос — это просто сохранённая форма поиска, которую можно повторно использовать по всему графу; он также позволяет применять логические операторы поиска, но не поддерживает полнотекстовый поиск:

          [[Important]] AND [[Project: Work]]
        • Поиск формирует представление подходящих блоков, в основном на основе текстового или семантического поиска — сейчас в нём нельзя использовать операции запросов вроде or/and.

        • Фильтр, ну, фильтрует любой список блоков — в разных областях (везде, только страницы, связанные упоминания и так далее). Но он сразу предлагает страницы для фильтрации (вместо того чтобы заставлять вас придумывать, что искать запросом), и иногда такой способ отбора можно сохранить.

      • Так вот, всё это должно быть одним и тем же! Я должен иметь возможность использовать логические операторы в поиске! Я должен иметь возможность временно отфильтровать результаты поиска! Я должен иметь возможность искать по подстроке после того, как определю, какие страницы или блоки мне нужны!
  7. Обновите уже этот чёртов сайт
    • Его нужно переделать, чтобы всё стало понятнее. Roam — не инструмент для ведения заметок, хотя именно с этого он начинался. А если бы у нас была генерация статических сайтов, графы со справкой и документацией для разработчиков было бы действительно легко найти и так далее.
  8. Более удобные TODO
    • Добавить состояние TODONT (у меня часто бывают TODO, которые я в итоге так и не выполняю)? Записывать, когда задача была отмечена как выполненная? Лучше реализовать откладывание задач? Добавить возможность повторяющихся TODO, например {{[[TODO]]: recurs: [[weekly]]}} или что-то подобное?
  9. Реализовать Move block to... — тут всё довольно очевидно.
  10. Ввод 1. должен автоматически переключать представление блоков на нумерованный список.
    • Мне всё равно, что технически «нумерованный список» — это родительский блок того блока, в котором я набираю 1.: это должно срабатывать! Добавьте невидимый родительский блок, что угодно, мне всё равно.

Совершенно новые базовые элементы

Агенты и ИИ-чаты как полноправные участники

  • Примерить идею Roam как полноценной среды для знаний, по которым можно перемещаться через чаты с LLM.
    • Все приложения для чатов с LLM страдают одной и той же проблемой: информация теряется внутри переписок. Roam как никакая другая среда подходит для того, чтобы в нём одновременно и велись эти разговоры, и извлекались из них знания для графа.
      • Иными словами, и входные данные (чаты), и результаты (артефакты) могут существовать в одной среде.
      • Первый шаг в этом направлении — вероятно, более продуманные базовые элементы для чатов, как набросано в разделе Нам нужны более продуманные базовые элементы для чатов и совместной работы .
      • Тогда внутри Roam могли бы появиться ИИ-чаты, похожие на те, что есть в Notion. Плагины сообщества уже это делают, но, честно говоря, думаю, это заслуживает полноценной встроенной поддержки.
  • Полная поддержка MCP/CLI для агентов.
    • На самом деле сейчас это уже почти полностью реализовано, но я всё равно считаю важным об этом упомянуть. Агенты изначально не понимают ни Roam, ни принятых в нём способов работы, ни его компонентов.
  • Более удобные инструменты для агентов, как в IDE. В Roam есть компоненты roam/js, позволяющие запускать код внутри графа, — но, возможно, можно что-то сделать, чтобы агентам было удобнее ими пользоваться. Например, документ с описанием навыка, более подробные аннотации для инструментов MCP, инструмент семантического поиска для агентов и так далее…

Нам нужны более продуманные базовые элементы для чатов и совместной работы

  • a) Нам нужно представление блоков / компонент для чата.
    • Сейчас у нас есть комментарии Roam — по сути, это лишь сочетание клавиш и мыши (Cmd + щелчок по кнопке комментария), которое создаёт структуру блоков для комментария через боковую панель.
    • Но даже чисто визуально это можно улучшить.
      • Показывать имя автора на блоке, представления конечных блоков и веток обсуждения и так далее. Вот очень быстрый эксперимент, для которого я подал на вход статью Макса Кригера Общение с Glue .
    • Можно было бы задать чат с правами доступа на уровне блоков — чтобы только определённые люди или агенты могли видеть эту ветку или писать в ней? И так далее.
  • b) Нам нужен интерфейс для PR в Roam — предлагаемых блоков — вместо их немедленного внесения.
    • Думаю, при совместной работе и работе с агентами нужен способ просматривать, одобрять и отклонять блоки и изменения, вместо того чтобы сразу их вносить.
  • c) Более удобная работа с версиями блоков.
    • Сайты с ИИ-чатами реализовали первую на моей памяти систему версий блоков, пригодную для полноценного использования. В Roam версии блоков появились раньше, но пользоваться ими почти невозможно. Им нужно больше внимания.

Нам нужна более продуманная модель времени

  • a) Нам нужно представление блоков в виде временной шкалы / Google Calendar.
    • Значительная часть команды и пользователей Roam ведёт дневник в промежутках между делами, а полноценной поддержки времени на этом уровне всё ещё нет! Было бы очень полезно воспроизвести возможности Google Calendar внутри ежедневной заметки:
  • b) Сочетаемые абстракции времени (часы > день > неделя > месяц > год > десятилетие / век).
    • Одна из больших проблем Roam — то, как всё теряется и как трудно увидеть общую картину во времени.
    • Сейчас есть ежедневные заметки, но нельзя увидеть «неделю», месяц или год в целом либо сослаться на них.
    • С визуальной стороны даже простая раскладка заметок за неделю в виде плиток разной высоты или календарное представление месяца были бы отличным подспорьем.
  • Реализовать поддержку времени во всём поиске, фильтрах, запросах и так далее — тут всё очевидно: я не могу сказать «покажи мне все результаты этого запроса за прошлую неделю» и так далее…
  • Часть проблемы в том, что время здесь одновременно непрерывно и дискретно, — так что, подозреваю, тут придётся серьёзно поработать с математикой…

Roam как встраиваемая среда

  • Думаю, идея не нова, но мне часто хотелось использовать Roam как среду и для ввода, и для вывода данных в других местах веба. Например:
    • Представьте форму на основе Roam, которую можно встраивать на сайты?
    • Встроить «лист Roam», чтобы делать заметки рядом с видео.
    • Поделиться черновыми заметками с другом.
    • Встроить содержимое Roam в пост блога.
  • Теперь, когда ряд их API уже готов, возможностей для этого стало больше…

Настоящий обход графа и возможности гиперграфа

  • Рёбра могут давать гораздо больше возможностей. Сейчас в Roam нельзя работать с ними напрямую. Думаю, атрибуты развиваются примерно в этом направлении, но я могу ошибаться…
  • Также нет способа работать с «кластерами» или рассматривать графы на более высоких уровнях…

P.S. Этот пост никак не связан с Notion. Мне нравится пользоваться их продуктом, и у них работает много талантливых людей, в том числе замечательный Джеффри Литт . Просто мне показалось, что это забавный заголовок.