# CLAUDE.md — инструкции для Claude Code ## Основная цель проекта ServerManager создан чтобы **Claude Code мог управлять серверами через глобальный скилл `/ssh`**, зная только алиасы серверов. Claude **никогда не видит логины и пароли** — скрипт `ssh.py` сам читает credentials из зашифрованного `servers.json`. ``` Claude Code → /ssh investor "uptime" → ssh.py → servers.json (encrypted) → SSH ↑ ↓ Видит только alias + команду Пароли остаются локально Результат ``` ## Как пользоваться /ssh ```bash # Выполнить команду на сервере /ssh investor "uptime" /ssh main-ovh "systemctl status nginx" # Список серверов (без паролей) /ssh --list # Статус всех серверов /ssh --status # Загрузить файл /ssh investor --upload /local/file /remote/path # Скачать файл /ssh investor --download /remote/file /local/path # Проверить доступность /ssh investor --ping ``` ## Как настроить на новой машине 1. Клонировать: `git clone https://git.sensey24.ru/aibot777/server-manager.git` 2. `pip install -r requirements.txt` 3. `python main.py` → вкладка Setup → "Install Everything" 4. Добавить серверы через GUI → Claude Code сразу видит их через `/ssh --list` Setup устанавливает: - `ssh.py` → `~/.server-connections/` - `encryption.py` → `~/.server-connections/` - `/ssh` skill → `~/.claude/commands/ssh.md` - SSH-ключ (ed25519) ## Версионирование **Автоматическое.** `build.py` сам инкрементирует patch-версию при каждой сборке. ```bash python build.py # автобамп 1.8.9 → 1.8.10, сборка python build.py --no-bump # сборка без изменения версии python build.py --clean # очистка артефактов + сборка ``` Файл версии: `version.py` → `__version__` Semver: **MAJOR** (ломающие) | **MINOR** (новая фича) | **PATCH** (багфикс — автобамп) Для minor/major бампа — вручную изменить version.py перед сборкой. ## Git — коммит и пуш **ОБЯЗАТЕЛЬНО:** После завершения изменений — коммить и пуши: ```bash git add <изменённые файлы> git commit -m "vX.Y.Z: описание" git push sensey master ``` - Remote: `sensey` (https://git.sensey24.ru/aibot777/server-manager.git) - Ветка: `master` ## Архитектура ``` ServerManager/ ├── main.py # Entry point ├── version.py # Version (auto-bumped by build.py) ├── build.py # PyInstaller + auto version bump ├── core/ # Business logic │ ├── server_store.py # CRUD + encrypted JSON + backups │ ├── encryption.py # Fernet encryption │ ├── ssh_client.py # Paramiko SSH/SFTP/ShellSession │ ├── session_pool.py # LRU session pool (max 5 concurrent) │ ├── claude_setup.py # Claude Code integration installer │ ├── status_checker.py # Background monitoring │ ├── totp.py # TOTP/2FA (pyotp) │ ├── i18n.py # EN/RU/ZH translations │ └── logger.py # Rotating file logger ├── gui/ # CustomTkinter UI │ ├── app.py # Main window │ ├── sidebar.py # Server list + session indicators │ ├── tabs/ # Terminal, Files, Info, Keys, 2FA, Setup │ └── widgets/ # TerminalWidget (pyte), FileList, StatusBadge ├── tools/ # CLI tools (installed to ~/.server-connections/) │ ├── ssh.py # SSH utility for Claude Code │ └── skill-ssh.md # /ssh skill template └── releases/ # Built executables ``` ## Ключевые особенности терминала - **pyte** эмулятор + tkinter Text виджет - **Session pool** — сессии живут при переключении серверов, буфер сохраняется через pickle - **Auto-sudo** — детекция `[sudo] password for` в выводе, автоматическая отправка пароля - **Ctrl+C** — double-press (1.5s) для SIGINT, single = copy (если есть выделение) - **Keyboard layout independent** — Ctrl+C/V/D/L/Z работают через keycode, не зависят от раскладки - **Copy/Paste** — Ctrl+C/Ctrl+Shift+C/правый клик для копирования, Ctrl+V для вставки (с bracketed paste)