CommaMatrix
СКРАФТИ СВОЕГО ИИ-АГЕНТА
Русский | English
Релизы · Документация · Примеры
Вы - пользователь с Windows?
Запустите минималистичного ИИ-агента, поставляемого с CommaMatrix, прямо сейчас (инструкция ниже). Это абсолютно бесплатно и абсолютно конфиденциально: между вами и ИИ стоит лишь интернет-провайдер.
Способ 1. Скачать файл
Скачайте и запустите install.ps1. Скачанный файл откройте двойным кликом.
Способ 2. Одна команда
- Нажмите
Win + R. - Введите
powershellи нажмите Enter. - Вставьте команду:
irm https://github.com/matrixd0t/commamatrix/releases/latest/download/install.ps1 | iex
- Выберите русский язык, базовый режим установки и следуйте инструкциям. Приложение появится в области уведомлений, откуда можно будет открыть окно чата в браузере или завершить работу программы. Значок быстрого запуска появится на рабочем столе.
Не забудьте сохранить пароль. Вы сможете поменять имя или пароль через веб-интерфейс.
Чем это отличается от ChatGPT?
Агент может сделать все, что вы можете сделать за компьютером. Например, обработать 20 фотографий в вашем Photoshop; собрать для вас сводку вечерних новостей через ваш браузер; или написать отчет, а затем сохранить его в формате Word и отправить с вашей почты. Не нужны ни промпты, ни плагины, ни иные формы интеграции: модель сама по себе достаточно умна для таких задач, а встроенные возможности CommaMatrix достаточно полны.
Вы - разработчик?
CommaMatrix для агента — как операционная система для пользователя.
Если одна модель — это мозг, то CommaMatrix — это нервная система.
Библиотека позволяет соединять в согласованную систему любой набор компонентов: мозгов (llm-адаптеров), модулей речи и органов чувств (коннекторов), конечностей (инструментов), внутренних органов (компонентов жизненного цикла), инструкций, моделей "диалога" и конфигурационных полей, а также как внутренней, так и бизнес-логики (хуков).
CommaMatrix полностью модульна. Вы можете заменить любой класс библиотеки на свою реализацию, или добавить свою реализацию к существующим в commamatrix/builtin.
Все builtin — лишь модули, написанные на CommaMatrix, но идущие в комплексте с ней. Этого достаточно, чтобы понимать богатство его возможностей — и баланс этого с простотой фреймворка. В их число входят:
- Десять хуков в различных местах жизненного цикла, имеющих механизмы абсолютного и относительного "приоритета". Кстати, такой же механизм имеют и инструкции модели - влияет на их расположение в промпте относительно друг друга. Вся внутренняя логика CommaMatrix реализована через ее хуки.
- LLM HTTP адаптер. CommaMatrix понимает все, что говорит на
chat completions,openai requestsилиanthropic messages, и вы можете добавить к этому свои кодеки, реализуя подклассApiCodec. Или реализуйте собственныйLLMAdapter, например, для управления локальной моделью изнутри CommaMatrix. CodeAct- программируемые вызовы инструментов. Любая функция на Python с декоратором @tool — инструмент модели, а любой инструмент модели, независимо от источника (даже MCP) — асинхронная функция на Python. Вы можете добавлять свои источники инструментов, реализуя свой подклассToolSource, или переопределять компоненты, используемыеbuiltin.- Поддержка многопользовательского и мультидиалогового общения ("диалогом" для CommaMatrix считается любой уникальный объект, способный принимать, хранить и отдавать слушателю сообщения пользователей). Реализуйте подклассы
DialogOriginиConnector. #todo пример в examples: кроссплатформенный мессенджер с ИИ-модерацией - HTTP-коннектор: общайтесь с моделью через окно чата в браузере сами и передавайте права доступа другим, генерируя одноразовые приглашения. Есть и API-эндпойнты.
- Планировщик заданий: создавайте heartbeat для агента или позвольте ему создавать их самостоятельно.
- SQL-хранилище данных: агент может выполнять поиск по диалогам, базе пользователей и любой иной информации из базы. SQLite и PostgreSQL поддерживаются "из коробки". Если вашему приложению нужно хранить структурированные данные, реализуйте подкласс
BaseTable. Хотите ORM? Пожалуйста, реализуйте свой подклассStorage. - Веб-клиент на httpx2 и минималистичный веб-сервер на uvicorn + starlette, но вы можете — что? — правильно, использовать что-то иное, реализовав подкласс.
- Автоинжекция контекста в инструменты, инструкции, хуки через параметр
ctxв стиле fastapi. Все контексты строго типизированы и содержат ссылку на инстанс агента. - А еще поиск в интернете через
ddgs(#todo: сделать поисковой бэкенд нормальным классом, чтобы вы могли подключить / реализовать собственный) и запись/чтение любого вида данных по HTTP / с диска / из произвольной реализации файлового хранилища (реализуйте подклассFileStorage). - Хотите что-то принципиально новое, не указанное в списке? Реализуйте подкласс
Service,AbstractService,Descriptor,Manager,Sourceили любого из существующих подклассов; чтобы подключить любой свой компонент к жизненному циклу агента.
Модель отвечает за интеллект. CommaMatrix отвечает за всё остальное.
Весь фреймворк - в контекстном окне
Исходник CommaMatrix помещается в контекстное окно даже моделей предыдущего поколения. Менее 200k токенов со всеми функциями "из коробки".
| Метрика | Ядро, без builtin |
С builtin |
|---|---|---|
| Токенов | ~48 000 | ~124 000 |
| Строк Python-кода | ~6 000 | ~16 000 |
Технические подробности
CommaMatrix рассчитан на Python 3.13+, для установки рекомендуется использовать uv.
uv venv --python 3.13
uv add "commamatrix[all]"
Если делаете git clone:
uv sync --extra all
Quickstart
Задайте конфигурацию провайдера. CommaMatrix также подхватит .env:
export OPENAI_API_KEY="your-api-key"
export LLM_API_BASE="https://api.openai.com"
Создайте quickstart.py:
import asyncio
import os
from commamatrix import *
from commamatrix.builtin import llm_http_adapter
async def main() -> None:
agent = Agent(name="my_lovely_assistant")
await agent.add_extensions(
commamatrix.builtin.default_instruction, # добавляйте расширения так
llm_http_adapter, # или так
"commamatrix.builtin.http_connector", # или по именам модулей
)
# полная изоляция состояний для каждого агента
agent.config.set(llm_api_base, os.environ["LLM_API_BASE"]) # изменяйте настройки в любой момент
agent.config.set(openai_api_key, os.environ["OPENAI_API_KEY"]) # можно передавать lambda-предикаты в значения
agent.config.set(agentic_model, "deepseek-v4-flash")
# для названия модели: первое вхождение подстроки будет распознано
# например, 'deepseek/deepseek-v4-flash'
# в приоритете наиболее дешевый провайдер
async with agent: # в стиле asynccontextmanager, но можно и await agent.start() / agent.stop()
print(f"CommaMatrix agent is running at {agent.http_server.base_url}")
await asyncio.Event().wait()
if __name__ == "__main__":
asyncio.run(main())
Запустите:
uv run quickstart.py
async with agent гарантирует корректную остановку агента при выходе из блока, включая
отмену по Ctrl+C. Если приложению нечего делать между запуском и остановкой,
используйте:
await agent.run_forever()
HTTP UI и HTTP-коннектор
Откройте http://127.0.0.1:8338/commamatrix. При первом запуске HTTP-коннектор
создаёт администратора и возвращает сгенерированный пароль.
По умолчанию хост задан как 127.0.0.1. Если вы поднимаете приложение на сервере, переключите http_host на 0.0.0.0, чтобы к вашему агенту можно было подключиться извне. Добавляйте или удаляйте пользователей через страницу в браузере, чтобы работать над проектами совместно.
Свой интерфейс / доступ через API
Health-эндпойнт не требует авторизации:
curl http://127.0.0.1:8338/commamatrix/health
Для API-запросов сначала получите токен:
curl -X POST http://127.0.0.1:8338/commamatrix/api/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"YOUR_ADMIN_PASSWORD"}'
Затем отправьте сообщение:
curl -X POST http://127.0.0.1:8338/commamatrix/api/messages \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content":"Explain what CommaMatrix does in one sentence."}'
Для SSE-потока добавьте к запросу ?stream=1 и читайте события из /commamatrix/api/events.
Взаимодействие с LLM
LLM HTTP adapter по умолчанию требует:
| Переменная | Назначение |
|---|---|
OPENAI_API_KEY |
Токен для OpenAI-compatible и OpenAI Responses API |
ANTHROPIC_API_KEY |
Токен для Anthropic Messages API |
LLM_API_BASE |
Base URL провайдера |
В зависимости от провайдера задайте llm_api_protocol как chat_completions (по умолчанию),
responses или anthropic_messages.
Отправка локальных файлов внешней LLM требует публичного IP-адреса: настройте http_external_url, иначе функция будет недоступна.
Конфигурация
Вы можете также задавать поля конфигурации при создании агента, передавая словарь config как аргумент.
Вызов функции agent.config_fields_markdown() выведет все конфигурационные поля: тип,
описание и значение по умолчанию. Вызовите метод, не запуская агента, чтобы посмотреть, какие настройки доступны с текущим набором расширений:
from commamatrix import *
async def main() -> None:
agent = Agent(name="my_lovely_assistant", config={
agentic_model: 'claude-opus-5'
})
await agent.add_extensions(
commamatrix.builtin.default_instruction,
commamatrix.builtin.llm_http_adapter,
commamatrix.builtin.http_connector,
)
print(agent.config_fields_markdown())
Расширения
Список расширений изолирован для конкретного агента и не привязан к импорту модулей. Можно добавлять свои расширения: все содержимое модуля просматривается CommaMatrix на наличие объявленных хуков, инструментов, инструкций, коннекторов и иных модулей. Все компоненты, имеющие жизненный цикл, автоматически подтягиваются в жизненный цикл агента.
По умолчанию все, что объявлено в модуле __main__ и все, что содержится в директории .commamatrix/plugins, загружается как расширение. Предотвратить это можно при помощи Agent(auto_load_main=False) и/или Agent(auto_load_plugins=False).
from commamatrix.builtin import data_tools, web_utils
import my_package, my_module
await agent.add_extensions("data_tools", "web_utils") # можно использовать имена
await agent.add_extensions(my_package.my_extension)
await agent.add_extensions(my_module)
Внутренние модули пакета нужно импортировать из его __init__.py; ре-экспорт сам по себе не считается декларацией компонента.
Основные смысловые компоненты: @tool, @instruction, @hook (и конструктор Hook, позволяющий создавать новые события для хуков), Service, Connector, BaseTable, Storage, FileStorage, LLMAdapter и @lifecycle_component.
Прочитайте руководство по созданию расширений. Там же находятся ссылки на специализированные руководства.
Посмотрите папку examples/ — там есть пример интерфейсного
агента и headless executor с делегированием задач субагенту.
Безопасность
- Пароли HTTP-коннектора хешируются, а сгенерированный пароль администратора выдается единожды при первом запуске агента
- В CodeAct на бэкенде по-умолчанию (
SubprocessBackend) выполняется произвольный Python-код с оступом к стандартной библиотеке, установленным зависимостям и терминалу. Это небезопасно. Для недоверенных пользователей используйте внешний isolation layer, например systemd или Docker. - Перед публикацией HTTP-коннектора проверьте reverse proxy, TLS, CORS, авторизацию.
- Используйте общие для всех расширений компоненты, не создавайте их заново: например,
agent.http_clientдля Интернет-запросов иagent.http_serverдля регистрации своих эндпойнтов.
written with love by dotmatrix
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file commamatrix-0.1.9.tar.gz.
File metadata
- Download URL: commamatrix-0.1.9.tar.gz
- Upload date:
- Size: 199.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d823340bb9dc6c021bbf4271f19a73793f621cdd9e7da4c3eae4d078be943a32
|
|
| MD5 |
d98d627ca461f8a1283843fa3b3bd71a
|
|
| BLAKE2b-256 |
105c56fe4c43bda45b38c46936f637ff9a889ee4877457b79a510ab0f5ae6afd
|
Provenance
The following attestation bundles were made for commamatrix-0.1.9.tar.gz:
Publisher:
publish.yml on matrixd0t/commamatrix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
commamatrix-0.1.9.tar.gz -
Subject digest:
d823340bb9dc6c021bbf4271f19a73793f621cdd9e7da4c3eae4d078be943a32 - Sigstore transparency entry: 2386520949
- Sigstore integration time:
-
Permalink:
matrixd0t/commamatrix@f6e8a560a412110daf38c384ee7184489c638e03 -
Branch / Tag:
refs/tags/v0.1.9 - Owner: https://github.com/matrixd0t
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f6e8a560a412110daf38c384ee7184489c638e03 -
Trigger Event:
push
-
Statement type:
File details
Details for the file commamatrix-0.1.9-py3-none-any.whl.
File metadata
- Download URL: commamatrix-0.1.9-py3-none-any.whl
- Upload date:
- Size: 260.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd2ceb0e3562689cfbb0d9e820777435b0dc97bf6772e424edc3ea1cb929aaed
|
|
| MD5 |
f5522a6f2d877588914ea888997c74e1
|
|
| BLAKE2b-256 |
470506f842169ab74c720813c92d97f3c44f7bb79588f31fdd39d2539135fbad
|
Provenance
The following attestation bundles were made for commamatrix-0.1.9-py3-none-any.whl:
Publisher:
publish.yml on matrixd0t/commamatrix
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
commamatrix-0.1.9-py3-none-any.whl -
Subject digest:
bd2ceb0e3562689cfbb0d9e820777435b0dc97bf6772e424edc3ea1cb929aaed - Sigstore transparency entry: 2386520958
- Sigstore integration time:
-
Permalink:
matrixd0t/commamatrix@f6e8a560a412110daf38c384ee7184489c638e03 -
Branch / Tag:
refs/tags/v0.1.9 - Owner: https://github.com/matrixd0t
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f6e8a560a412110daf38c384ee7184489c638e03 -
Trigger Event:
push
-
Statement type: