Skip to content

Latest commit

 

History

History
157 lines (123 loc) · 9.08 KB

File metadata and controls

157 lines (123 loc) · 9.08 KB

grit

Git для ИИ-агентов — ноль конфликтов слияния, любое количество параллельных агентов, одна кодовая база.

Когда 50 агентов работают в одном репозитории, git ломается. Grit — нет.

Read in English: README.md


Результаты бенчмарка (5 итераций x 5 раундов)

Agents  Git Merge Failures  Grit Merge Failures  Git Conflict Files
───────┼────────────────────┼─────────────────────┼───────────────────
     1          0  (0%)             0  (0%)             0
     2          5  (50%)            0  (0%)            38
     5         20  (80%)            0  (0%)            80
    10         43  (86%)            0  (0%)            90
    20         83  (83%)            0  (0%)           130
    50        175  (70%)            0  (0%)           175

Grit: 0 конфликтов во всех 1 500 попытках слияния.

Как это работает

                        ПРОБЛЕМА
  ┌─────────────────────────────────────────────────┐
    10 ИИ-агентов редактируют разные функции       
    в ОДНОМ файле (auth.ts)                        
                                                   
    Git видит: один файл изменён в 10 ветках       
    Результат: O() конфликтов слияния            
  └─────────────────────────────────────────────────┘

                        РЕШЕНИЕ
  ┌─────────────────────────────────────────────────┐
    Grit блокирует на уровне ФУНКЦИЙ (AST)         
    а не на уровне ФАЙЛОВ (строки)                 
                                                   
    Agent-1 блокирует: validateToken()             
    Agent-2 блокирует: refreshToken()              
     Один файл, разные функции, ноль конфликтов   
  └─────────────────────────────────────────────────┘

  ┌──────────┐    ┌──────────┐    ┌──────────┐
   1. CLAIM │───▶│ 2. WORK  │───▶│ 3. DONE  
                                        
   Lock AST      Parallel      Rebase + 
   symbols       worktrees│     Merge    
  └──────────┘    └──────────┘    └──────────┘
                                     
                                     
  ┌──────────┐    ┌──────────┐    ┌──────────┐
   SQLite        .grit/        Serial   
   или S3        worktrees│     file lock│
   lock DB       /agent-N       merge  
  └──────────┘    └──────────┘    └──────────┘

Архитектура

┌─────────────────────────────────────────┐
              ваш git-репозиторий         
├─────────────────────────────────────────┤
  .grit/                                 
  ├── registry.db    (SQLite WAL)           индекс символов + таблица блокировок
  ├── config.json                           конфигурация бэкенда (локальный/S3)
  ├── room.sock      (Unix-сокет)           поток событий в реальном времени
  ├── merge.lock     (RAII-блокировка)      сериализует git-слияния
  └── worktrees/                         
      ├── agent-1/   (git worktree)         изолированная рабочая директория
      ├── agent-2/   (git worktree)      
      └── agent-N/   ...                 
├─────────────────────────────────────────┤
  Бэкенды:                               
  ├── Локальный: SQLite WAL (по умолч.)  
  ├── AWS S3 (conditional PUT)           
  ├── Cloudflare R2                      
  ├── Google Cloud Storage               
  ├── Azure Blob Storage                 
  └── MinIO (самостоятельный хостинг)    
└─────────────────────────────────────────┘

Проблема

Запуск N ИИ-агентов параллельно на кодовой базе создает O(N²) конфликтов слияния. Git работает на уровне строк — когда два агента редактируют разные функции в одном файле, Git видит конфликтующие фрагменты и слияние терпит неудачу.

Решение

Grit блокирует на уровне AST/функций с помощью tree-sitter. Каждый агент резервирует определенные функции перед редактированием. Разные функции в одном файле никогда не конфликтуют. Агенты работают в изолированных git worktree, и слияния сериализуются автоматически.

Установка

cargo install --git https://github.com/rtk-ai/grit

Быстрый старт

cd your-project
grit init                    # Парсинг AST, построение индекса символов

# Агент резервирует функции перед редактированием
grit claim -a agent-1 -i "добавить валидацию" \
  src/auth.ts::validateToken \
  src/auth.ts::refreshToken

# Агент работает в изолированном worktree: .grit/worktrees/agent-1/
# ... редактирование файлов ...

# Завершение: авто-коммит, ребейз, слияние, освобождение блокировок
grit done -a agent-1

Workflow сессии (интеграция с GitHub)

grit session start auth-refactor        # Создать ветку grit/auth-refactor
# ... агенты claim, работают, done ...
grit session pr                         # Push ветки + создать GitHub PR
grit session end                        # Очистка блокировок, возврат к базовой ветке

Команды

grit init                                    # Инициализация индекса символов
grit claim -a <agent> -i <intent> <syms...>  # Блокировка символов + создание worktree
grit done  -a <agent>                        # Слияние + освобождение блокировок
grit status                                  # Показать активные блокировки
grit symbols [--file <pattern>]              # Список проиндексированных символов
grit plan <symbols...>                       # Проверка доступности (dry-run)
grit release -a <agent> <symbols...>         # Освобождение конкретных блокировок
grit gc                                      # Очистка истёкших блокировок
grit heartbeat -a <agent>                    # Обновление TTL блокировки
grit watch                                   # Поток событий в реальном времени
grit session start|status|pr|end             # Жизненный цикл feature-ветки
grit config set-s3|set-local|show            # Конфигурация бэкенда

Поддерживаемые языки

TypeScript, JavaScript, Rust, Python (расширяемо через грамматики tree-sitter)


Лицензия

MIT — Copyright (c) 2026 Patrick Szymkowiak