← Задача 009 — все материалы · оригинал на GitHub

База знаний по недвижимости на стандартной схеме gbrain


Решения Константина 02.11.2026 (после версии 2) — главнее текста ниже


0. Как понял задачу

Одиннадцать требований Константина его словами (сообщения 02.11.2026):

  1. Долгосрочность. «Я хочу на долгосрок. Именно поэтому я использую базу знаний».
  2. Рост на другие темы и проекты. «сейчас по недвижимости такой вопрос, потом по какой-то еще теме», «на разные проекты, на разные задачи». Это главное: «потенциал на расширение, потенциал на развитие. И это ключевое».
  3. CRM: компания и сотрудники в одном месте. «есть компании. Есть сотрудники этой компании. И все в одном месте».
  4. Обогащение из WhatsApp. «я по WhatsApp упишу, а ну хуяка обогащается. Я знаю, что этого… зовут Франку… а вот это Адрес».
  5. Обогащение из почты. «мне на почту что-то написали, и это все добавилось к карточке».
  6. Разные агенты. «базу знания… которые могут использовать мои разные агенты».
  7. Стандартная схема gbrain. «хочу стандартную схему базы данных [gbrain] использовать… какие там еще у них схемы есть?», «сейчас у них БС2. А до этого была рекомендованная схема».
  8. Места и гео. «там были схемы, где есть места… География… по сути, теги могут быть».
  9. Проверка истинности. «Масштабируемая… система, четкая, с поверкой истинности».
  10. Русский поиск. «не знаешь, что такое Лемма… лексема… по умолчанию английский язык… на настройках на русских поставить можно».
  11. Векторы при росте. «Я подключу API, но не на 5… заметках… Будет 500 заметок. Подключу вектор».

Роль агента (уточнение Константина 02.11.2026, после версии 2):

Ещё два условия к работе:


1. Что в прошлом отчёте было неверно

Что писали Как на самом деле Где проверить
«гео в gbrain нет вовсе» Тип place (places/) есть в стандартном пакете gbrain-recommended. Район — страница-место, квартиры ссылаются на неё. Фильтр where находит значение и в поле-списке (теги). Нет только пространственного индекса (радиус, PostGIS); расстояние до пляжа считает скрипт по данным базы G/src/core/schema-pack/base/gbrain-recommended.yaml:112-118; G/src/core/search/frontmatter-where.ts:1-7
«отдельная база пускает одну сессию за раз» У базы PGLite один процесс-владелец. Решение в той же документации — один общий gbrain serve --http, к нему подключаются все агенты; у вас он уже работает службой на 127.0.0.1:3131. Цена ограничения в разделе 10: при живой службе команды CLI, которые открывают базу, падают, кроме sync и sweep --once G/docs/mcp/CLAUDE_CODE.md:92-100; G/docs/guides/remote-mcp.md:427-436
«без ключей с оплатой пользы мало» Без платных ключей работают поиск по словам, извлечение фактов через подписку (claude-cli) и «открытые петли» по почте. Векторы — бесплатно через Ollama или за копейки через API, когда заметок станет ~500 G/src/core/ai/recipes/ollama.ts:53; G/src/core/embedding-pricing.ts:38-87
«русский нельзя включить без переиндексации cheaptrip» — как довод против Язык один на всю базу, это правда. Но cheaptrip тоже русский: переиндексация полезна обоим G/docs/guides/multi-language-fts.md:103-105
своя модель RESO/EspoCRM с типами agent, agency В стандарте уже есть person, company и связь works_at ↔︎ employs. Поле company: у страницы человека создаёт связь само, при любом пакете G/src/core/link-extraction.ts:1607-1610,2009-2014; G/src/core/schema-pack/base/gbrain-base-v2.yaml:419-420
страницы — «копия JSON, руками не правится» При такой схеме обогащение невозможно: следующая сборка сотрёт факт, который дописал агент. В gbrain страницы ведёт агент G/docs/GBRAIN_RECOMMENDED_SCHEMA.md:80
ссылка here.now на 24 часа Постоянная публикация на Cloudflare Pages, ссылка — первая строка этого отчёта —

2. Термины


3. Стандартные схемы gbrain — все восемь пакетов

Пакеты лежат в G/src/core/schema-pack/base/.

Пакет Наследует (extends) Назначение Что важно для нас
gbrain-base 1.0.0 — прежнее «зашитое» поведение (gbrain-base.yaml:1-5); 28 типов страниц, page_types, строки 56–324 person, company, deal, meeting, conversation, email; frontmatter_links: company → works_at; обогащение person, company, deal (:381-423). Типа place нет
gbrain-base-v2 1.5.0 («БС2») — (самостоятельный) в шапке — «15 канонических типов + note»; в page_types сейчас 23 имени (строки 61–392) person, company (подтипы company / product / org), account (алиас crm, «a customer or CRM record», :7-9,104-112), deal, email, conversation, meeting, project, note. Связи с обратными: works_at ↔︎ employs, owes_to, awaiting_reply_from, supersedes (:400-442). Типа place нет. Правило-«ловушка»: при чистке типов необъявленный тип становится note (:649-657)
gbrain-recommended 1.0.0 gbrain-base (v1) пакетная версия документа GBRAIN_RECOMMENDED_SCHEMA.md (gbrain-recommended.yaml:1-10) place (entity, places/) (:112-118), trip (:120-126), deal, meeting, project (entity), daily, personal. Своих связей не объявляет, берёт из v1
company-brain 0.2.0 gbrain-base-v2 (company-brain.yaml:31) мозг компании: клиенты, конкуренты, поставщики, решения (:36-128) готовый образец «свой пакет поверх v2»: свои связи с inference.target_type, frontmatter_links (поле owner → owned_by), enrichable_types (:130-208)
gbrain-creator 1.0.0 gbrain-base линза автора: атомы контента, фазы extract_atoms, synthesize_concepts (gbrain-creator.yaml:67-69) для CRM не нужна; пригодится, если база станет источником текстов
gbrain-engineer 1.0.0 gbrain-base линза разработчика: тип learning (learnings/) уроки агентов, не CRM
gbrain-investor 1.0.0 gbrain-base линза инвестора: thesis, журнал ставок ставки вида «цена на Барселонете упадёт к весне» — 🔮 пригодится для решения о покупке
gbrain-everything 1.0.0 gbrain-investor склейка трёх линз, чтобы обойти правило «один активный пакет» (gbrain-everything.yaml:4-16) типов для недвижимости не добавляет

Какой пакет у вас активен

Что говорит документ рекомендованной схемы о недвижимости

Что из этого следует для выбора

  1. На «БС2» уже работают person, company, works_at ↔︎ employs, deal, conversation, email. Это и есть CRM «компания ↔︎ сотрудники».
  2. Места (place) есть только в gbrain-recommended. Но он построен на старом v1: переход на него — откат, пропадут account и обратные связи v2.
  3. Штатный способ получить и то и другое — свой пакет extends: gbrain-base-v2 с типом place и типами недвижимости. Так устроен поставляемый company-brain. Как писать свой пакет — G/docs/schema-author-tutorial.md:15-174. Ключ API для этого не нужен (:15).
  4. Правило-«ловушка» v2 в свой пакет не наследуется: mapping_rules объявляет только сам пакет (merge.ts:19-20).

Два варианта, которые я разобрал и не предлагаю


4. Модель недвижимости на стандартной схеме

Предлагаемый пакет — cons-gbrain-base-v2-plus-places-and-properties (extends: gbrain-base-v2). Добавляем только то, чего в стандарте нет. Ниже — рекомендуемый вариант (вопрос 2, вариант 2б): меньше всего новых типов.

4.1. Сущность → тип → папка

Сущность Тип Откуда тип Папка источника Почему этот тип
Агентство (On Urbe Grup Barceloneta) company v2 companies/ стандартный тип CRM; участвует в whoknows
Агент (Franco, Fernando, Victor) person v2 people/ стандартный; поле company: даёт works_at, обратная связь — employs
Общий аккаунт офиса в WhatsApp account v2 accounts/ v2 прямо определяет его как «CRM record». Это не человек: пишут разные сотрудники
Район, пляж, улица place, подтипы district, beach, street из gbrain-recommended places/ стандартный тип «место»
Дом (Sant Miquel 116) place, подтип building то же places/buildings/ дом — тоже место, у него есть адрес и координаты. Отдельный тип по правилу учебника пока рано (ниже)
Квартира (первая на Pescadors) property единственный новый тип properties/ в стандарте нет. Квартира существует и без объявления и торга
Объявление (Ukio ANFA 907 на весну 2027, Idealista) deal, подтип listing v2 deals/listings/ gbrain: «A financial transaction with terms… → deals/» (GBRAIN_RECOMMENDED_SCHEMA.md:980). У объявления есть условия: цена, даты, депозит
Переговоры, торг (пакет из двух квартир Pescadors) deal, подтип negotiation v2 deals/negotiations/ то же: условия плюс решение. Итог — поля outcome, lost_by, lost_reason (4.6)
Просмотр квартиры (05.08.2026, Keller Williams) meeting v2 meetings/ поле attendees: даёт связь attended
Переписка WhatsApp conversation v2 conversations/whatsapp/ в отдельном источнике с этого типа извлекаются факты (G/src/core/facts/conversation-types.ts:30-37); пониженное доверие (раздел 7)
Письмо email v2 emails/ то же
Поиск «купить у пляжа», «аренда весна 2027» — критерии записывает только Константин project v2 projects/ цель с критериями и сроком; к ней привязаны объявления и торги

Почему так мало новых типов — правило учебника gbrain (G/docs/schema-author-tutorial.md:212):

Сейчас квартир 20 (realestate-registry/REGISTRY-realestate-properties-apartments.json), объявлений Ukio 5, домов единицы. Поэтому:

4.2. Пакет целиком — файл ~/.gbrain/schema-packs/cons-gbrain-base-v2-plus-places-and-properties/pack.yaml

api_version: gbrain-schema-pack-v1
name: cons-gbrain-base-v2-plus-places-and-properties
version: 0.1.0
gbrain_min_version: 0.42.0
extends: gbrain-base-v2
description: |
  gbrain-base-v2 + места (place, как в gbrain-recommended) + квартиры (property).
  Цена и торг — числовыми фактами на карточке квартиры (решение Константина 02.11.2026, 1а).
  Один пакет на все источники базы.

page_types:
  - name: place
    primitive: entity
    path_prefixes:
      - places/
    subtypes:
      - name: building
        when:
          path_pattern: "^places/buildings/"
      - name: beach
        when:
          frontmatter_field: place_kind
          frontmatter_value: beach
      - name: street
        when:
          frontmatter_field: place_kind
          frontmatter_value: street
      - name: district
        when:
          frontmatter_field: place_kind
          frontmatter_value: district
    aliases:
      - location
      - area
      - district
      - building
    extractable: false
    expert_routing: false

  - name: property
    primitive: entity
    path_prefixes:
      - properties/
    subtypes:
      - name: for-sale
        when:
          frontmatter_field: purpose
          frontmatter_value: buy
      - name: for-rent
        when:
          frontmatter_field: purpose
          frontmatter_value: rent
    aliases:
      - apartment
      - flat
      - piso
    extractable: false
    expert_routing: false

link_types:
  - name: located_in
    inverse: location_of
    inference:
      page_type: property
      target_type: place

frontmatter_links:
  - page_type: property
    fields: [place, building]
    link_type: located_in
  - page_type: place
    fields: [within]
    link_type: located_in
  - page_type: company
    fields: [place]
    link_type: located_in

enrichable_types:
  - type: property

filing_rules:
  - kind: place
    directory: places/
    description: Одна страница на район, пляж, улицу; дома — places/buildings/
  - kind: property
    directory: properties/
    description: Одна страница на квартиру (объект), независимо от объявлений

Оговорки:

4.3. Связи

Связь От → к Как создаётся Где объявлена
works_at ↔︎ employs person → company поле company: companies/on-urbe-grup-barceloneta у человека встроенная карта link-extraction.ts:1607-1610 при любом пакете; обратная — gbrain-base-v2.yaml:419-420
attended person → meeting поле attendees: у встречи link-extraction.ts:1620-1621
located_in ↔︎ location_of property, company, place → place поля place:, building:, within: пакет, раздел 4.2
about_property deal → property поле properties: (список) пакет
counterparty deal → company поле counterparties: пакет
negotiated_with deal → person поле agents: пакет
relates_to, mentions любые ссылка [[…]] в тексте v2
owes_to, awaiting_reply_from тред → человек движок «открытых петель» по почте v2; G/docs/guides/open-loops.md:83

4.4. Гео: что есть и чего нет

4.5. Тип по пути — проверка на cheaptrip

4.6. Итог переговоров — закрытый список


5. Пилот на реальных объектах

Данные — из реестров cl-cons-whats/realestate-registry/ и переписки. Телефоны в отчёте замаскированы. В базе, по совету gbrain, они лежат в поле phones: в формате E.164 — это точный ключ для склейки, а не псевдоним (GBRAIN_RECOMMENDED_SCHEMA.md:187).

5.1. companies/on-urbe-grup-barceloneta.md

---
type: company
title: "On Urbe Grup Barceloneta"
aliases: [On Urbe, OnUrbe Grup, On Urbe Grup]
website: https://onurbegrup.com
place: places/la-barceloneta
key_people: [people/franco-on-urbe, people/fernando-on-urbe, people/victor-on-urbe]
tags: [агентство, барселонета, покупка]
---
# On Urbe Grup Barceloneta
Агентство недвижимости на Барселонете (район la Barceloneta), с нами — только покупка.
Отвечают за минуты, пишут по-испански; цену хозяевам несут только с официальным
предложением и задатком 1 %.

<!-- timeline -->
- **2026-08-05** | WhatsApp офис On Urbe — начался торг за две квартиры на Carrer dels Pescadors пакетом
- **2026-10-27** | WhatsApp офис On Urbe — сами прислали новую квартиру

5.2. people/franco-on-urbe.md — тот самый «Франку»

---
type: person
title: "Franco (On Urbe Grup)"
aliases: [Franco, Франко, Франку]
company: companies/on-urbe-grup-barceloneta
role: real_estate_agent
languages: [es]
tags: [агент, покупка]
---
# Franco — агент On Urbe Grup Barceloneta
Пишет с общего аккаунта офиса. На вопрос о цене отвечает встречным
«¿Tu que numero tienes en mente?» — «какую сумму держишь в голове?».

<!--- gbrain:takes:begin -->
| # | claim | kind | who | weight | since | source |
|---|---|---|---|---|---|---|
| 1 | Franco торгуется встречным вопросом и цифру первым не называет | take | people/konstantin | 0.7 | 2026-08 | WhatsApp офис On Urbe, 27.08.2026 |
<!--- gbrain:takes:end -->

<!-- timeline -->
- **2026-08-27** | WhatsApp офис On Urbe — «el piso ya se ha rebajado de 185.000€»: цена снижена с 185 000 €
- **2026-08-31** | WhatsApp офис On Urbe — подтвердил, что квартиры юридически раздельные

5.3. properties/carrer-dels-pescadors-on-urbe-first-flat.md

---
type: property
title: "Квартира на Carrer dels Pescadors (первая из пары On Urbe)"
purpose: buy
place: places/la-barceloneta
lat: 41.379          # 🔮 точность — улица, не дом
lng: 2.190
geo_precision: street
tags: [у-пляжа, покупка]
---
# Квартира на Carrer dels Pescadors
Барселонета, улица Pescadors. Продаётся вместе со второй квартирой,
пакет 352 000 €; цена одной снижена с 185 000 до 176 000 €.

5.4. Успешный и неуспешный торг

deals/negotiations/pescadors-two-flats-package-on-urbe-2026.md — торг открыт:

---
type: deal
title: "Торг за две квартиры на Pescadors пакетом (On Urbe, 2026)"
properties: [properties/carrer-dels-pescadors-on-urbe-first-flat, properties/carrer-dels-pescadors-on-urbe-second-flat]
counterparties: [companies/on-urbe-grup-barceloneta]
agents: [people/franco-on-urbe]
project: projects/buy-apartment-near-beach-barceloneta
outcome: open        # итог ждёт ответа Константина (старый вопрос 9, раздел 14)
---
# Торг за две квартиры на Pescadors пакетом
Цена 352 000 € за обе. Наши предложения: 290 000 € (05.08), 280 000 € (27.08).
31.08 агент позвал подать твёрдое предложение; дальше в переписке пусто.

<!-- timeline -->
- **2026-08-05** | WhatsApp офис On Urbe — предложили 290 000 €
- **2026-08-27** | WhatsApp офис On Urbe — предложили 280 000 €
- **2026-08-31** | WhatsApp офис On Urbe — зовут оформить официальное предложение с задатком 1 %

deals/negotiations/housfy-calle-safareigs.md — торг не состоялся:

---
type: deal
title: "Квартира Housfy на Calle Safareigs — отказ"
properties: [properties/calle-safareigs-08003-housfy]
counterparties: [companies/housfy]
outcome: lost
lost_by: me
lost_reason: location-outside-search-zone
---

5.5. places/la-barceloneta.md


6. Обогащение карточек

6.1. Из WhatsApp — цепочка на настоящем сообщении

Исходное сообщение — CHAT-whatsapp-<номер>-on-urbe-grup.jsonl, запись:

  1. Выгрузка — только чтение. Её уже делают скрипты задач 002–008 через wacli --read-only (правило cl-cons-whats/CLAUDE.md: к WhatsApp агенты не обращаются, команды записи запускает только Константин).
  2. Переписка становится страницей conversation.
    • Конвертер: cl-cons-whats/whatsapp-export-scripts/SCRIPT-whatsapp-chat-jsonl-to-gbrain-conversation-pages.py (пишется на шаге 9 порядка внедрения).
    • Вход: CHAT-*.jsonl.
    • Выход: conversations/whatsapp/<contact-slug>/<YYYY-MM>.md в репозитории отдельного источника realestate-barcelona-whatsapp. Один файл — контакт и месяц.
    • Строка — формат WhatsApp «Export chat», который gbrain разбирает сам (whatsapp-iso, G/src/core/conversation-parser/builtins.ts:644-672):
      [27/08/26, 13:36:06] On Urbe Grup: Mira, el piso ya se ha rebajado de 185.000€, ¿Tu que numero tienes en mente?
    • Время в строке — UTC: у этого формата timezone_policy: 'inline_utc' (builtins.ts:660). Поэтому конвертер переводит время не в Мадрид, а в UTC.
    • Текст сообщений — недоверенные данные. Источник получает уровень external_untrusted (раздел 7).
  3. Синхронизация — gbrain sync. Под живой службой команда сама передаётся в serve (remote-mcp.md:431-432).
  4. Извлечение фактов по подписке.
    • Модель — gbrain config set facts.extraction_model claude-cli:claude-haiku-5-5. Модель — полным именем: короткий алиас haiku ведёт на старую claude-haiku-4-5-20251001 (G/src/core/ai/recipes/claude-cli.ts:132-137).
    • Та же ловушка уже есть у вас: в ~/.gbrain/config.json стоит chat_model: claude-cli:sonnet, а алиас sonnet ведёт на claude-sonnet-4-6. В окне обслуживания заменить на полное имя актуальной модели.
    • Доступность модели проверяется функцией isAvailable('chat', модель) (G/src/core/facts/extraction-availability.ts:23-28), а claude-cli отвечает на chat (G/docs/ai-providers/claude-cli.md:7-13). 🔮 Подтвердить на одной переписке до массового прогона.
    • Пакетно — gbrain extract-conversation-facts (G/src/commands/extract-conversation-facts.ts:1-25) в окне обслуживания.
    • Без окна — MCP extract_facts с entity_hints: [people/franco-on-urbe], valid_from: 2026-08-27T13:36:06Z, source_slug = страница переписки (G/src/core/ops/facts.ts:60-80).
  5. Факт ложится на карточку.
    • Строка в таблице facts с entity_slug, source, valid_from, confidence;
    • зеркало в markdown — блок gbrain:facts (fence-format.md:32-56);
    • пример факта: «цена квартиры Pescadors снижена с 185 000 €».
  6. Сводка и хронология. Скилл enrich переписывает сводку и дописывает строку хронологии через put_page и add_timeline_entry (G/skills/enrich/SKILL.md:1-25).

Итог: вопрос «как зовут агента On Urbe и что он предлагал» отвечается одной карточкой — с датой, ссылкой на сообщение и страницей переписки, у которой метка «external, untrusted».

6.2. Из почты


7. Проверка истинности


8. Русский поиск


9. Векторы

Провайдер Цена за 1 млн токенов ~500 заметок Русский и испанский Что нужно
Ollama bge-m3 0 (ollama.ts:53), размерность 1024 (:49) 0 🔮 многоязычная модель, по общим знаниям сильна для русского; в коде gbrain не проверяется установить Ollama — только с согласия Константина; модель работает на этом Mac
OpenAI text-embedding-3-small $0,02 (embedding-pricing.ts:38-87) ≈ $0,02 🔮 многоязычная ключ API — подключает Константин
Voyage-4 $0,06 ≈ $0,06 🔮 многоязычная ключ API

10. Доступ разных агентов

10.1. Один общий сервер — и его настоящая цена

10.2. Агенты

Агент Подключение Ограничение Пишет в (первый источник гранта) Что делать
Claude Code (эта машина) MCP HTTP 127.0.0.1:3131 токен без грантов читает только default и federated-источники — источники с --no-federated он не увидит (G/docs/guides/multi-source-brains.md:119-123) realestate-barcelona для сессий по недвижимости грант на realestate-barcelona, realestate-barcelona-whatsapp, default. 🔮 Лучше отдельный токен «агент недвижимости», чтобы факты cheaptrip по-прежнему писались в default
Cursor только HTTP (G/docs/guides/harness-adapters.md:19) — по задаче: свой токен на тему токен с грантом на нужные источники
Codex local-cli, stdio, http (harness-adapters.md:11) stdio запустит второй serve и упрётся в замок по задаче только HTTP, свой токен
Hermes только stdio (harness-adapters.md:18; G/docs/mcp/HERMES.md:8: «Hermes spawns gbrain serve as a local stdio subprocess») при живой HTTP-службе на PGLite второй serve падает на замке (CLAUDE_CODE.md:92-97) — до переезда на Postgres не подключать. 🔮 Если Hermes сам умеет MCP по HTTP, проверить это отдельно — в документации gbrain такого пути нет
Grok Bot (клиент базы cheaptrip) local-cli / thin-cli (harness-adapters.md:15) должен видеть только cheaptrip источники cheaptrip см. 10.3

10.3. Права и кто сейчас подключён


11. Масштабирование: источник в общей базе или отдельная база

Четыре варианта. Решает Константин (вопрос 1).

11.1. Вариант А — источники в общей базе, один свой пакет на все

11.2. Вариант Б — отдельная база ~/.gbrain-realestate со своей службой

11.3. Вариант В — подключённая база (gbrain mounts add)

11.4. Вариант Г — источник в общей базе со своим пакетом

11.5. Моё предложение — А


12. Нынешние реестры cl-cons-whats/realestate-registry/

Файл Записей Во что превращается Ключи
REGISTRY-realestate-companies-and-agencies.json 25 companies/<company_id>.md slug = company_id
REGISTRY-realestate-contacts-people-and-company-accounts.json 36 people/… (агенты, хозяева) и accounts/… (общие аккаунты офисов) slug — по имени и агентству. Старый contact_id — в поле registry_ids, кроме тех, где в id есть номер телефона (idealista-advertiser-346…): у них slug без номера, номер — в phones:
REGISTRY-realestate-properties-apartments.json 20 properties/<property_id>.md, плюс deals/listings/… там, где есть объявление с ценой и датой, и deals/negotiations/… там, где был торг или отказ (rejected_by_me, rejected_by_them → outcome: lost) slug = property_id
HISTORY-realestate-unclear-cases-and-decisions-with-reasoning.jsonl 40 строки хронологии и факты с источником «решение Константина» на карточках номер строки — в поле source факта

13. Порядок внедрения

Подготовка — без базы, служба работает

№ Шаг Команда Что увидеть
0.1 Файл пакета скопировать файл из 4.2 в ~/.gbrain/schema-packs/cons-gbrain-base-v2-plus-places-and-properties/pack.yaml; gbrain schema validate cons-gbrain-base-v2-plus-places-and-properties; gbrain schema diff gbrain-base-v2 cons-… validate без ошибок; diff — только добавления. Обе команды читают только файлы (G/src/commands/schema.ts:330-350,705-720), при живой службе работают
0.2 Два репозитория источников git-репозитории страниц (имя — вопрос 3) с первым коммитом: --path must be a git repo with committed files (G/src/commands/sources.ts:1976-1978) репозитории есть
0.3 Конвертеры два скрипта из 6.1 и 12; прогон на копии — 5 страниц пилота страницы раздела 5 в репозитории

Окно обслуживания — launchctl bootout gui/$(id -u)/com.gbrain.serve

№ Шаг Команда Что увидеть Трогает cheaptrip Откат
1 Резервная копия cp -R ~/.gbrain/brain.pglite <папка копии>; gbrain backup create --output <абсолютный путь>.gbrain-backup (G/src/commands/backup.ts:39-40) обе копии на месте читает —
2 Пакет gbrain schema use cons-gbrain-base-v2-plus-places-and-properties; gbrain schema active активен новый пакет да: пакет общий, но типы cheaptrip не меняются (4.5) gbrain schema use gbrain-base-v2. Откат не нейтральный, если страницы place и property уже загружены: v2 их не знает, при чистке типов они станут note (gbrain-base-v2.yaml:649-657). Откатывать до шага 8
3 Русский поиск строка в ~/.gbrain/.env (раздел 8); gbrain reindex-search-vector --dry-run, затем --yes gbrain doctor без fts_reindex_incomplete да: вся база вернуть english, ещё одна переиндексация того же объёма
4 Модель фактов gbrain config set facts.extraction_model claude-cli:claude-haiku-5-5; chat_model — полным именем вместо алиаса sonnet gbrain doctor не жалуется на модель фактов да: общая настройка gbrain config set facts.extraction_model "" 🔮
5 Источники gbrain sources add realestate-barcelona --path … --no-federated; gbrain sources add realestate-barcelona-whatsapp --path … --no-federated; gbrain sources set-trust realestate-barcelona-whatsapp external_untrusted gbrain sources list показывает оба нет gbrain sources archive <id> или remove … --dry-run, затем --confirm-destructive
6 Права gbrain auth list; токену Grok Bot — gbrain auth rescope --token <имя> --sources <источники cheaptrip>; агенту недвижимости (новый токен Claude Code) — gbrain auth rescope --token <имя> --sources realestate-barcelona,realestate-barcelona-whatsapp,default, первый id — куда пишутся факты (facts.ts:111, multi-source-brains.md:230-247); новые токены Cursor и Codex — gbrain auth create … --scopes read,write, затем rescope Grok Bot не видит источники недвижимости права вернуть прежний грант из вывода auth list
7 Проверка gbrain doctor без ошибок читает —

gbrain schema sync --apply не нужен: он перетипизирует уже загруженные страницы по префиксам (G/docs/schema-author-tutorial.md:128-131), а страниц places/ и properties/ в базе ещё нет (4.5). Если пакет будут менять после переноса — запускать его в окне.

После окна — launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.gbrain.serve.plist. Затем MCP get_active_schema_pack должен показать новый пакет.

При живой службе

№ Шаг Команда Что увидеть Откат
8 Пилот и перенос коммит 5 страниц пилота → gbrain sync; затем все 25 + 36 + 20; entity_identity_link для Константина вопросы раздела 5 отвечаются через MCP; связи works_at на месте убрать страницы коммитом и sync
9 Переписка конвертер WhatsApp → gbrain sync; извлечение — extract-conversation-facts по источнику переписки в следующем окне или MCP extract_facts страницы переписки — external_untrusted (уровень источника, sources-trust.ts:1-9); факты на карточках с источником и датой. 🔮 Уровень доверия самих фактов: при MCP — вероятно agent_written (memory-trust.md:20); проверить на пилоте forget по фактам
10 Карта генератор читает файлы репозитория realestate-barcelona, считает расстояние до пляжа, собирает HTML; публикация на Cloudflare Pages карта по постоянной ссылке —
11 Почта поиск писем агентов по шести ящикам; в окне — gbrain sources add gmail-<ящик> --kind google --access command … письма агентов — страницы email; петли — gbrain waiting убрать источник
12 Чистка раз в неделю — проверки из раздела 7; gbrain eval suspected-contradictions список находок —
13 Векторы при ~500 страниц; ключ подключает Константин; в окне — gbrain migrate embeddings --dry-run, затем --yes «у моря» находит «у пляжа» migrate embeddings назад

Флаги add-type / add-link-type не нужны: пакет пишется файлом целиком (4.2). Это проверяемее, чем десяток команд.


14. Вопросы к Константину

❓ Вопрос 1. Где жить базе недвижимости?

❓ Вопрос 2. Набор типов

❓ Вопрос 3. Имена репозиториев и пакета

❓ Вопрос 4. Включить русский поиск на всю базу, вместе с cheaptrip?

❓ Вопрос 5. Переписку WhatsApp загружать целиком или только факты?

❓ Вопрос 6. Какие почтовые ящики подключать?

Вопросы 7–12 версии 2 сняты

🔑 Если согласны со всеми моими предложениями: «1а 2б 3а 4а 5а 6а». Иначе — ваши буквы по номерам.