# pi-env

[English](README.en.md) | [Русский](README.md)

[![npm version](https://img.shields.io/npm/v/@devmaksi/pi-env?logo=npm)](https://www.npmjs.com/package/@devmaksi/pi-env)
[![npm downloads](https://img.shields.io/npm/dm/@devmaksi/pi-env)](https://www.npmjs.com/package/@devmaksi/pi-env)
[![CI](https://github.com/devmaksi/pi-env/actions/workflows/ci.yml/badge.svg)](https://github.com/devmaksi/pi-env/actions/workflows/ci.yml)
[![license](https://img.shields.io/npm/l/@devmaksi/pi-env)](LICENSE)
[![node](https://img.shields.io/node/v/@devmaksi/pi-env)](package.json)

**Профили для агента `pi`: своя конфигурация под каждый проект и модель — создание и запуск из одного TUI.**

Агент `pi` читает конфигурацию из каталога, заданного `PI_CODING_AGENT_DIR`:
`settings.json`, `extensions/`, `skills/`, `agents/`, `themes/`, `mcp.json`.
Разные модели, скиллы и MCP под разные задачи — это разные каталоги. `pi-env`
делает их управляемыми: список окружений, создание формой, запуск по Enter,
обновление расширений и MCP на месте — не покидая терминал.

![pi-env](docs/screenshot.png)

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

**Требования:** Node.js ≥ 20 и установленный CLI `pi`
(`npm install -g @earendil-works/pi-coding-agent`).

```bash
npm install -g @devmaksi/pi-env                  # либо одноразово: npx @devmaksi/pi-env
pi-env                                           # TUI, корень окружений — ~/.pi-env
pi-env myenv --mode json "Review this repository"  # запустить pi в окружении (аргументы — как есть)
```

## Зачем, если есть `PI_CODING_AGENT_DIR`

- Переменную всё равно надо помнить, экспортировать и держать в голове путь —
  `pi-env` превращает это в список с именами и запуском по Enter.
- Новое окружение — это не `mkdir`: нужно скопировать инструменты, скиллы,
  пакеты, каталог моделей и `auth.json`. Форма создания делает это сама.
- Расширения и MCP живут в разных файлах у каждого окружения; `pi-env`
  показывает обновления и правит `mcp.json` за тебя.
- Запуск остаётся запуском `pi`: дочерний процесс получает
  `PI_CODING_AGENT_DIR=<окружение>`, аргументы пробрасываются как есть — годно
  для скриптов и `--mode json`.

## Не путать с `@earendil-works/pi-env`

Это независимый проект, не связанный с earendil-works. Официальный
`@earendil-works/pi-env` — про удалённое исполнение (`ssh`, `remote`,
durable-агенты) и к управлению локальными конфигурациями отношения не имеет.
Похожее имя, разный смысл.

## Возможности

- список окружений (корневой каталог `~/.pi-env`, переопределяется флагом
  `--root <путь>` или переменной `PI_ENV_ROOT`);
- вкладки: **Окружения | Расширения | MCP | Настройки | О программе**;
- создание окружения через форму: имя, модель, инструменты, расширения-пакеты,
  скиллы (каталог берётся из main-агента `pi`), MCP-серверы;
- запуск окружения: дочерний процесс `pi` с
  `PI_CODING_AGENT_DIR=<путь окружения>`, возврат в TUI по выходе;
- редактирование окружения: смена модели, инструментов, пакетов, скиллов,
  MCP, переименование, удаление с подтверждением;
- управление расширениями: просмотр обновлений (маркеры «↑ latest»),
  обновление одного/всех пакетов (`pi update`), удаление (`pi remove`);
- установка расширений из каталога `https://pi.dev/packages`: глобально (вкладка
  «Расширения») и в конкретное окружение (кнопка «Установить» в форме);
- MCP: вкладка со списком серверов, добавление формой (`pi mcp add`),
  удаление, живой статус подключения (`pi mcp list --json`);
- детализация окружения: инфо-панель выбранного (модель, инструменты, скиллы,
  расширения-пакеты, MCP);
- настройки приложения: «Цветной вывод», «Перепроверка обновлений»
  (`npm outdated` при каждом входе во вкладку «Расширения»); сохраняются в
  `<root>/.pi-env.json` и переживают перезапуск.

## Управление (основные клавиши)

| Клавиши                      | Действие                                                              |
| ---------------------------- | --------------------------------------------------------------------- |
| ↑/↓                          | перемещение в списке                                                  |
| ←/→                          | фокус колонок (широкий режим, вкладка «Окружения»)                    |
| TAB                          | переключение вкладок                                                  |
| Enter                        | подтвердить (запуск окружения, действие по выбранному пункту)         |
| Space                        | отметка в списках создания / toggle в настройках (цвет, перепроверка) |
| E                            | редактировать выбранное окружение                                     |
| X                            | удалить выбранное расширение (с подтверждением)                       |
| печатные символы / Backspace | ввод имени (форма создания)                                           |
| ESC                          | назад из суб-экрана / выход                                           |
| Ctrl+C                       | аварийный выход                                                       |

## Установка

```bash
npm install -g @devmaksi/pi-env   # либо одноразово: npx @devmaksi/pi-env
```

Все способы установки (включая установку Node.js), удаление и примечания
(TTY, Windows) — в [docs/installation.md](docs/installation.md).

## Документация

- [Установка](docs/installation.md) — Node.js, установка/удаление pi-env
- [Разработка](docs/development.md) — стек, быстрый старт, структура проекта,
  конвенции
- [CHANGELOG.md](CHANGELOG.md) — история версий
- [AGENTS.md](AGENTS.md) — модель окружений, текущий статус, дорожная карта

## Для агента pi

Пакет несёт скилл `pi-env`: если поставить его как pi-пакет
(`pi install npm:@devmaksi/pi-env`), агент сможет сам создавать окружения,
запускать их и объяснять, что лежит в `settings.json`. Ручная настройка —
в [SKILL.md](pi/skills/pi-env/SKILL.md).
