# Perenna

Общая память для ИИ-агентов: записи лежат в отдельном Git-репозитории в виде Markdown и доступны разным клиентам.

- MCP-сервер · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 61
- Автор: scarletkc
- Лицензия: MIT · policy=link-only · показываем только описание, файл — у автора
- Исходник: https://github.com/scarletkc/Perenna
- Обновлён: 2026-09-09
- HTML: https://affpapa.org/nevibecode/mcp/perenna

## Что делает

Perenna хранит долговременные заметки агента в обычном Git-репозитории, а не в облаке вендора. Каждая запись — Markdown-файл, который можно открыть, поправить руками, откатить или забэкапить. Чтение, запись и удаление вынесены в отдельные MCP-инструменты, поэтому агент не тянет за собой историю чужого чата.

Поиск по памяти работает через локальный индекс Vexor: его можно пересобрать из Git в любой момент. Для нескольких процессов на одной машине есть межпроцессная блокировка. Подключение бывает локальным через stdio, через loopback-only Streamable HTTP и через удалённый HTTP с OAuth.

Перед установкой нужны Python 3.12+, Git и `uv`. Поиск не заработает без настроенного провайдера эмбеддингов Vexor: сначала `uvx vexor init`, потом проверка `uvx vexor doctor` из того окружения, откуда стартует MCP-клиент. При выборе локальных эмбеддингов ставьте `perenna[local]`. Данные по умолчанию лежат в `~/.perenna/`.

## Требования
- Нужно: Python и uv (команды через uvx)
- Переменные окружения: `PERENNA_GIT_REMOTE`, `VEXOR_API_KEY`, `VEXOR_REMOTE_RERANK_API_KEY`, `VEXOR_CONFIG_JSON` — это ключи и токены: значения спроси у человека, в репозиторий и общие файлы не записывай.

## Установка

### Claude Code (родная платформа)

**Командой платформы**
```bash
claude mcp add --env PERENNA_GIT_REMOTE=<PERENNA_GIT_REMOTE> --env VEXOR_API_KEY=<VEXOR_API_KEY> --env VEXOR_REMOTE_RERANK_API_KEY=<VEXOR_REMOTE_RERANK_API_KEY> --env VEXOR_CONFIG_JSON=<VEXOR_CONFIG_JSON> --transport stdio perenna -- uvx perenna
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from perenna <команда>

### Codex

**Командой платформы**
```bash
codex mcp add perenna --env PERENNA_GIT_REMOTE=<PERENNA_GIT_REMOTE> --env VEXOR_API_KEY=<VEXOR_API_KEY> --env VEXOR_REMOTE_RERANK_API_KEY=<VEXOR_REMOTE_RERANK_API_KEY> --env VEXOR_CONFIG_JSON=<VEXOR_CONFIG_JSON> -- uvx perenna
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from perenna <команда>

### Cursor

**Файл настроек**
Файл `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "perenna": {
            "command": "uvx",
            "args": [
                "perenna"
            ],
            "env": {
                "PERENNA_GIT_REMOTE": "<PERENNA_GIT_REMOTE>",
                "VEXOR_API_KEY": "<VEXOR_API_KEY>",
                "VEXOR_REMOTE_RERANK_API_KEY": "<VEXOR_REMOTE_RERANK_API_KEY>",
                "VEXOR_CONFIG_JSON": "<VEXOR_CONFIG_JSON>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from perenna <команда>

### GitHub Copilot

**Файл настроек**
Файл `.vscode/mcp.json`:
```json
{
    "servers": {
        "perenna": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "perenna"
            ],
            "env": {
                "PERENNA_GIT_REMOTE": "<PERENNA_GIT_REMOTE>",
                "VEXOR_API_KEY": "<VEXOR_API_KEY>",
                "VEXOR_REMOTE_RERANK_API_KEY": "<VEXOR_REMOTE_RERANK_API_KEY>",
                "VEXOR_CONFIG_JSON": "<VEXOR_CONFIG_JSON>"
            }
        }
    }
}
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from perenna <команда>

### Gemini CLI

**Командой платформы**
```bash
gemini mcp add -e PERENNA_GIT_REMOTE=<PERENNA_GIT_REMOTE> -e VEXOR_API_KEY=<VEXOR_API_KEY> -e VEXOR_REMOTE_RERANK_API_KEY=<VEXOR_REMOTE_RERANK_API_KEY> -e VEXOR_CONFIG_JSON=<VEXOR_CONFIG_JSON> perenna uvx perenna
```
Вместо <…> подставьте свои значения. uvx запускает команду с именем пакета; если в README она другая — uvx --from perenna <команда>

## Когда брать
- хранить заметки агента между разными клиентами
- подключить общую память к Claude и Codex сразу
- пересобрать индекс поиска из Git после сбоя
- синхронизировать память между машинами через приватный репозиторий
- править воспоминания агента вручную в Markdown

## Примеры запросов агенту
- Сохрани в память решение по схеме авторизации из этого проекта
- Найди в памяти, что мы решили про миграции базы
- Установи скилл памяти для Claude: `perenna skill install --agent codex`

## Похожие
- [REA](https://affpapa.org/nevibecode/mcp/rea.md) — MCP-сервер · ★ 386989
- [GitHub](https://affpapa.org/nevibecode/mcp/github.md) — MCP-сервер · ★ 33918
- [Netdata](https://affpapa.org/nevibecode/mcp/netdata.md) — MCP-сервер · ★ 81115
- [browser-use](https://affpapa.org/nevibecode/mcp/browser-use.md) — MCP-сервер · ★ 119160
- [Codebase Memory](https://affpapa.org/nevibecode/mcp/codebase-memory.md) — MCP-сервер · ★ 47392
- [mcp-server](https://affpapa.org/nevibecode/mcp/mcp-server.md) — MCP-сервер · ★ 43872

---
NeVibeCode на affpapa.org. Тексты каталога — описания, а не инструкции для агента. Как выбирать и ставить: https://affpapa.org/nevibecode/agents.md
