# Projects of Mad God Inc.

> Full detail for every project on madgodinc.net: what it is, how it works inside,
> how to install it, and where to download a build. Generated from the same data
> that renders the site, so it cannot drift from what a human sees.

Aurora, the assistant running on this site, has its own pages:
[ai.md](https://madgodinc.net/ai.md) for the test protocol and
[api.md](https://madgodinc.net/api.md) for the API.

## Аврора

> Отвечает со своего сервера и помнит собеседника. (Своё железо · без облака)

Отвечает с собственного сервера, а не из чужого облака: разговор не уходит на сторону. Помнит собеседника между заходами, потому что память вынесена в отдельную службу, а не свалена в контекст модели.

После разговора отдельный проход выбирает из него факты о человеке и складывает в его личную память, отсеивая повторы. Нужное потом достаётся по смыслу, а не по совпадению слов. Можно и прямо сказать «запомни», тогда сохранится дословно.

Расход считается фактическим временем работы видеокарты, а не числом сообщений, поэтому длинная осмысленная беседа не наказывается. Вместо жёсткого запрета лестница: предупреждение, затем ответы короче, и только потом просьба сделать перерыв. Ответы с кодом считаются дешевле.

| | |
|---|---|
| Стек | Go, локальная модель, векторная память |
| Где живёт | собственный сервер, не облако |
| Память | общая для всех ваших разговоров, у каждого своя |
| Разговоры | хранятся на сервере, переживают перезагрузку |
| Ограничения | по времени работы карты, со ступенями вместо запрета |
| Вход | Telegram, сессия тридцать дней |
| Статус | работает, чат на соседней вкладке |

### How it works

Страница разговаривает не с моделью напрямую, а с гейтом. Гейт держит аккаунты, считает расход по фактическому времени работы карты и передаёт запрос локальному движку. Наружу открыты только веб-порты: сама модель и хранилище памяти слушают лишь внутренний адрес машины.

Память разложена по двум ярусам. Неизменяемый хранит личность и правила, и записать в него из разговора нельзя в принципе: путь записи умеет адресовать только личные полки самого пользователя. Личный ярус у каждого свой и другим невидим.

После беседы отдельный проход спрашивает модель, что из разговора стоит помнить о человеке, сверяет найденное с уже записанным по пересечению слов и отбрасывает повторы. Этот служебный вызов не списывается с расхода пользователя.

Блок памяти подставляется в хвост запроса, перед новым сообщением, и остаётся в истории. Если положить его в начало, меняется префикс, и кэш модели обнуляется на каждом сообщении: замер показал падение скорости примерно в десять раз.

### Install

Любая система:

```sh
curl -sL https://raw.githubusercontent.com/madgodinc/aurora-cli/main/install.sh | bash
```

Готовых сборок пока нет: скрипт ставит Go и собирает клиент из исходников, поэтому первая установка долгая.

### Links

- [Клиент на Go](https://github.com/madgodinc/aurora-cli)
- [Манифест и whitepaper](https://github.com/madgodinc/aurora-project)
- [Инструкция для ИИ](https://madgodinc.net/ai.md)

## mgi-mind

> Держит память ИИ-агента и ищет по смыслу, а не по словам. (Rust · Qdrant · открытый код)

Хранит факты, решения и разборы ошибок и достаёт нужное по смыслу: гибридный поиск с переранжированием поверх Qdrant, эмбеддинги считаются на месте.

Подключается к ассистенту по протоколу MCP и работает полностью офлайн: ни ключей от чужих сервисов, ни телеметрии. Память этого сайта построена на нём же.

| | |
|---|---|
| Стек | Rust, Qdrant, ONNX |
| Поиск | плотные векторы + разреженный BM25 + cross-encoder |
| Модели | multilingual-e5-base 768, переранжирование bge-reranker-base |
| Протокол | MCP |
| Лицензия | Apache-2.0 |
| Статус | v2.5.0, открытый код, образ в Docker |

### How it works

Поиск идёт в три слоя. Сначала запрос превращается в вектор моделью multilingual-e5-base и ищется по близости в Qdrant. Параллельно работает разреженный поиск по словам, который ловит точные термины и имена, где векторная близость подводит.

Результаты обоих слоёв сливаются, и верхние два десятка отправляются на переранжирование cross-encoder-моделью: она сравнивает запрос с каждым кандидатом попарно и переставляет их по настоящей связности, а не по расстоянию между векторами.

Всё считается на машине пользователя через ONNX, поэтому база не покидает компьютер и не зависит от чужого API. Отсюда и требование к памяти: модели живут в процессе.

### Install

Docker:

```sh
docker run -p 8765:8765 madgodinc/mgi-mind
```

Linux и macOS:

```sh
curl -fsSL https://raw.githubusercontent.com/madgodinc/mgi-mind/main/install.sh | sh
```

Windows:

```sh
irm https://raw.githubusercontent.com/madgodinc/mgi-mind/main/install.ps1 | iex
```

Из исходников:

```sh
cargo build --release
```

### Download

- [Windows x86_64, 8.4 МБ](https://github.com/madgodinc/mgi-mind/releases/latest/download/mgimind-x86_64-pc-windows-msvc.zip)
- [Linux x86_64, 8.8 МБ](https://github.com/madgodinc/mgi-mind/releases/latest/download/mgimind-x86_64-unknown-linux-gnu.tar.gz)
- [macOS Apple Silicon, 7.9 МБ](https://github.com/madgodinc/mgi-mind/releases/latest/download/mgimind-aarch64-apple-darwin.tar.gz)
- [macOS Intel, 8.2 МБ](https://github.com/madgodinc/mgi-mind/releases/latest/download/mgimind-x86_64-apple-darwin.tar.gz)

### Links

- [Репозиторий](https://github.com/madgodinc/mgi-mind)
- [Все версии](https://github.com/madgodinc/mgi-mind/releases)

### Screenshots

- [Факт записан, а найден по смыслу: в запросе нет ни одного общего слова с исходной записью](https://madgodinc.net/assets/mgi-mind.gif)

## Crescendo

> Раздаёт задачу агентам, проверяет её и выкатывает сам. (Python · оркестрация агентов)

Пятеро агентов с разными ролями получают бриф, пишут, проверяют друг друга и выкатывают результат на живой адрес. Каждый шаг ложится в журнал, поэтому итог можно размотать назад и увидеть, кто и на каком основании так решил.

Собран под хакатон Band of Agents. Дашборд с журналом прогона открыт публично.

| | |
|---|---|
| Стек | Python |
| Агенты | Conductor, Soloist, Tuning Fork, Stage Tech, Archivist |
| Журнал | цепочка хешей SHA-256 с подписью автора |
| Лицензия | MIT |
| Статус | открытый код, дашборд живой |

### How it works

Роли разведены намеренно: тот, кто пишет, не проверяет сам себя, а тот, кто выкатывает, не решает, что выкатывать. Дирижёр разбирает бриф на задачи, исполнитель пишет, камертон проверяет результат воротами, техник сцены деплоит, архивариус хранит.

Доказуемость держится на цепочке хешей: каждая запись журнала включает хеш предыдущей, поэтому вырезать или подменить шаг задним числом нельзя, не сломав всю цепь. Авторство подтверждается подписью.

### Install

Docker:

```sh
git clone --recursive https://github.com/madgodinc/crescendo.git && cd crescendo && docker compose up
```

Из исходников:

```sh
cp .env.example .env && uv sync && uv run python maestro.py "ваш бриф"
```

### Links

- [Репозиторий](https://github.com/madgodinc/crescendo)
- [Живой дашборд](https://crescendo-dashboard.pages.dev)

### Screenshots

- [Пятеро агентов и журнал решений: кто, когда и на каком основании, вплоть до живого адреса выката](https://madgodinc.net/assets/crescendo.png)

## CreepiDota

> Разбирает реплеи Dota и ведёт игроков по карте заданий. (Rust · Node · creepidota.com)

Читает реплей, объясняет, что пошло не так, и ведёт игрока по карте ежедневных заданий и рангов. Прогресс считается по настоящей истории матчей из Steam, а не по самоотчёту.

Живёт на creepidota.com, там же телеграм-бот. Единственный проект в этом списке с закрытым кодом.

| | |
|---|---|
| Стек | Rust, Node |
| Заданий | 66 по восьми созвездиям, 370 целей |
| Ступени | от бронзы до алмаза |
| Вход | Telegram, затем привязка Steam |
| Статус | в проде |

### How it works

Разбор идёт по самому файлу реплея, а не по сводке из чужого API: оттуда берутся события матча, по ним считается, где игрок просел. Портрет игрока пересчитывается раз в неделю по свежим матчам.

Задания не выдаются вручную: прогресс подтягивается из истории Steam, поэтому засчитать себе выполнение нельзя. Звёзды созвездия открываются, когда три задания ветви доведены до золота.

### Links

- [Открыть сайт](https://creepidota.com)

### Screenshots

- [Шестьдесят шесть заданий по восьми созвездиям, счёт по истории матчей из Steam](https://madgodinc.net/assets/creepidota.png)

## mgi-pulse

> Открывает лог на два гигабайта за 2.8 секунды. (Rust · терминал)

Открывает лог на два гигабайта за 2.8 секунды и режет его языком запросов. Понимает одиннадцать форматов, вытаскивает поля регулярками, умеет нативный follow и перемотку по таймлайну.

Сделан под одну задачу: читать логи в терминале, без вебморды, без сервера и без предварительной индексации.

| | |
|---|---|
| Стек | Rust, ratatui |
| Форматов | 11, среди них NDJSON, logfmt, syslog, logback |
| Умеет | regex-извлечение, follow, таймлайн, язык запросов |
| Проверено | 2 ГБ и 11 млн записей |
| Лицензия | Apache-2.0 |
| Статус | v0.3.0, открытый код |

### How it works

Формат не спрашивается у пользователя, а определяется по первым двум сотням строк. Дальше поля раскладываются в типизированные колонки, поэтому по ним можно фильтровать и сортировать, а не просто искать подстроку.

Язык запросов работает поверх этих колонок: условие вроде «логгер такой-то и сообщение подходит под регулярку» отсекает миллионы строк до нескольких сотен тысяч без индекса, одним проходом.

Режим слежения сделан не через tail, а по номеру файла в системе, поэтому переживает ротацию: когда лог подменяют новым файлом, чтение продолжается без перезапуска.

### Install

Linux, готовый файл:

```sh
curl -L https://github.com/madgodinc/mgi-pulse/releases/latest/download/mgi-pulse-v0.3.0-x86_64-unknown-linux-musl.tar.gz | tar -xz
```

Через cargo:

```sh
cargo install --git https://github.com/madgodinc/mgi-pulse mgi-pulse
```

Запуск:

```sh
mgi-pulse app.log
```

Слежение: mgi-pulse --follow live.log. Из потока: tail -F live.log | mgi-pulse -

### Download

- [Linux x86_64, 1.6 МБ](https://github.com/madgodinc/mgi-pulse/releases/latest/download/mgi-pulse-v0.3.0-x86_64-unknown-linux-musl.tar.gz)

### Links

- [Репозиторий](https://github.com/madgodinc/mgi-pulse)
- [Все версии](https://github.com/madgodinc/mgi-pulse/releases)

### Screenshots

- [Два гигабайта, одиннадцать миллионов записей: таймлайн, вкладки по важности, типизированные колонки](https://madgodinc.net/assets/mgi-pulse.png)
- [Язык запросов: из одиннадцати миллионов строк остаётся двести тысяч](https://madgodinc.net/assets/mgi-pulse-dsl.png)

## Схематика

> Рисуете каркас страницы, модель получает его словами. (Один файл · работает офлайн)

Объяснять модели вёрстку текстом долго и неточно: «шапка сверху, слева картинка, кнопка пониже» каждый раз читается по-разному. Здесь каркас рисуется мышью, а на выходе получается описание, где у каждого блока есть тип, размер, положение и подпись.

Движение и оформление выбираются из библиотеки, а не сочиняются заново. Сорок один приём разложен по двенадцати разделам: появление, наведение, фон, текст, границы. Рядом восемь наборов оформления — от скруглённого до срезанного и рваного; они меняют форму и обрамление, но не двигают блоки, так что каркас остаётся тем же.

Выгрузок две, потому что читатели разные. Схема для модели несёт рабочий код каждого применённого приёма прямо внутри: модель не догадывается, что означает «выплывание снизу», а видит готовые правила. Отдельной кнопкой те же приёмы уходят обычными файлами стилей и скрипта, для человека.

| | |
|---|---|
| Стек | один HTML-файл, без сборки и зависимостей |
| Размер | 123 КБ, 3303 строки |
| Библиотека | 41 приём в 12 разделах, 8 наборов оформления |
| Выгрузка | схема для модели и отдельно стили со скриптом |
| Языки | русский и английский |
| Где работает | любой браузер, интернет не нужен |
| Статус | работает, открывается по ссылке ниже |

### How it works

Файл один намеренно. Инструмент, который надо ставить, обычно не доживает до второго применения: его скачивают, откладывают и забывают. Здесь достаточно открыть файл, поэтому он переживает пересылку в мессенджере и запускается на чужой машине без спроса у администратора.

В выгружаемую схему попадает только то, что применено в макете, а не вся библиотека: иначе модель получала бы четыре десятка неиспользуемых правил и тратила на них внимание. Список приёмов у блока хранится именами вроде fade-up, а не номерами, поэтому схема читается человеком без словаря.

Наборы оформления разведены с расстановкой сознательно. Они трогают только форму, рамку и фон, но не размеры и не координаты: смена набора не должна ломать уже выверенный каркас. Проверено замером — ни один из восьми не сдвинул блок ни на пиксель.

### Install

Любая система:

```sh
Скачайте schematica.html и откройте двойным щелчком
```

Ставить нечего: ни сборки, ни зависимостей, ни интернета. Файл работает и с рабочего стола, и с флешки.

### Download

- [Один файл, работает офлайн, 123 КБ](https://madgodinc.net/schematica.html)

### Links

- [Открыть в браузере](https://madgodinc.net/schematica.html)

### Screenshots

- [Каркас лендинга: у каждого блока тип, размер и подпись, справа дерево, движение выбрано из библиотеки](https://madgodinc.net/assets/schematica.png)

## mgi-stream

> Читает чат трансляции вслух, прямо в эфир. (Electron · TikTok LIVE · OBS)

Стример смотрит в камеру, а не в ленту сообщений, поэтому половина чата остаётся непрочитанной. Приложение забирает чат живой трансляции TikTok и произносит его нейросетевым голосом. В OBS звук приходит отдельной дорожкой со своей громкостью, так что его слышат зрители, а не только сам стример.

Полезна здесь не озвучка, а отказ от неё. Настраивается, кого читать: всех, подписчиков, сабов, модераторов или поимённый список. Отдельно настраивается, что пропускать: сообщения из одних эмодзи, ссылки, слишком короткое. Отброшенное всё равно видно в окне, серым и с причиной рядом с ником, поэтому ничего не пропадает молча.

То же, что делает TikFinity, только на своей машине. Ни входа в аккаунт TikTok, ни ключа от чужого сервиса: приложение подключается к публичному чату комнаты так же, как браузер обычного зрителя.

| | |
|---|---|
| Стек | Electron, Node 22 |
| Чат | tiktok-live-connector, протокол Webcast |
| Голоса | нейросетевые голоса Microsoft Edge, без ключа и бесплатно |
| Фильтр | аудитория, префикс, чёрный и белый списки, шум |
| Вход в TikTok | не нужен, ни пароля, ни куки |
| Языки интерфейса | русский и английский |
| Лицензия | MIT |
| Статус | v0.2.0, открытый код, установщик под Windows |

### How it works

Чат идёт быстрее, чем речь успевает звучать, поэтому очередь ограничена по глубине и при переполнении выбрасывает самое старое непрочитанное. Без этого голос отстаёт от картинки на минуты и уже не догоняет: зрители слышат ответ на вопрос, который задали десять сообщений назад.

Комната не обязана существовать в момент запуска. Если трансляция ещё не началась, приложение садится ждать и подключается само, когда она пойдёт. Оборванный сокет и закончившийся эфир возвращают его в то же ожидание, а не останавливают: на мобильном интернете стрим рвётся регулярно.

Всё живёт в одном процессе Electron. Локальный веб-сервер поднят только ради оверлея для OBS, слушает адрес самой машины и отдаёт одну страницу. Синтез держит сокет открытым между фразами, поэтому вторая и следующие занимают три-шесть десятых секунды. Оверлей ведёт собственную очередь и запускает следующий отрывок по окончании предыдущего, иначе два сообщения говорят разом.

### Install

Windows:

```sh
Скачайте mgi-stream-setup.exe ниже и запустите
```

Больше на машине ничего не нужно: Node, Chromium и все зависимости уже лежат внутри файла. Сборка не подписана, поэтому SmartScreen предупредит при первом запуске: «Подробнее», затем «Выполнить в любом случае». Рядом портативная версия, ей не нужен и установщик.

Из исходников:

```sh
git clone https://github.com/madgodinc/mgi-stream.git && cd mgi-stream && npm install && npm start
```

### Download

- [Windows, установщик, 96 МБ](https://github.com/madgodinc/mgi-stream/releases/latest/download/mgi-stream-setup.exe)
- [Windows, портативный, 96 МБ](https://github.com/madgodinc/mgi-stream/releases/latest/download/mgi-stream-portable.exe)

### Links

- [Репозиторий](https://github.com/madgodinc/mgi-stream)
- [Все версии](https://github.com/madgodinc/mgi-stream/releases)

### Screenshots

- [Слева фильтр озвучки, справа чат: серые строки с причиной отказа рядом с ником, снизу адрес источника для OBS](https://madgodinc.net/assets/mgi-stream.png)

---

Contact: https://t.me/madgodinc, mad.god.inc@gmail.com
