Korvus AI popup: выделенный текст → Claude, OpenAI, локальные модели. Трей, стриминг, два языка.
Project description
kortalk
Korvus AI popup — приложение семейства korvus (korserver, korctl, kortalk). AI-popup для выделенного текста в духе Crow Translate: выделили текст мышью → нажали хоткей → у курсора всплыло окошко с ответом ИИ. Живёт в трее, стримит ответы, поддерживает несколько провайдеров.
Возможности
- Popup у курсора — скруглённые углы, Markdown-рендер ответа с подсветкой
блоков кода, стриминг токенов в реальном времени, выделение/копирование
текста. Закрывается по клику за пределами окна или
Escape. - Окно в два столбца — редактируемый промпт+текст слева, ответ справа,
выбор провайдера на панели,
Ctrl+Enterдля отправки. - Трей — приложение резидентно: монохромный ворон (Corvus — символ korvus), ЛКМ = popup с выделением, меню с библиотекой промптов, окном, настройками и выходом.
- Глобальные хоткеи внутри приложения — назначаются в настройках
(по умолчанию
Ctrl+Alt+Cpopup,Ctrl+Alt+Wокно). X11 — прямой перехват XGrabKey, Wayland — системный портал GlobalShortcuts. Никаких внешних утилит и настройки DE не требуется. - Библиотека промптов — несколько именованных промптов в настройках; промпт по умолчанию для хоткея, любой другой — из подменю трея.
- Провайдеры ИИ:
- Claude Code CLI — через
claude -p, без API-ключа (по умолчанию); - Anthropic API — официальный SDK, стриминг (нужен API-ключ);
- OpenAI-совместимые API — OpenAI, Ollama, LM Studio, OpenRouter,
Groq, DeepSeek и любой другой сервис с
/chat/completions(настраиваетсяbase URL+ модель + ключ, для локальных серверов ключ не нужен).
- Claude Code CLI — через
- Графические настройки — промпты, клавиши, тема, шрифт, размеры popup,
таймауты, менеджер провайдеров с ключами, автозапуск при входе.
Конфиг — человекочитаемый YAML (
~/.config/kortalk/config.yaml). - Тема и шрифты — по умолчанию следует теме окружения (Qt), опционально Nord Dark / Nord Light.
- Два языка интерфейса — английский (по умолчанию) и русский: Настройки → Общие → Language.
- PRIMARY-выделение читается нативно через Qt — xclip/xsel/wl-clipboard больше не нужны. Работает на X11 и Wayland.
Установка
pipx install kortalk
kortalk --check # диагностика: провайдеры, трей, PRIMARY-выделение
Никаких системных пакетов и флагов вроде --system-site-packages не
требуется — Qt (PySide6) ставится из PyPI. Единственная внешняя зависимость —
Claude Code CLI, и только если используете
провайдер claude-cli.
Конфиг хранится в
~/.config/kortalk/config.yamlи редактируется через настройки (или руками). Конфиги прежних версий (toml/ini) не используются.
Использование
kortalk # запустить демона (трей + хоткеи)
kortalk --popup # popup у курсора (для скриптов/сторонних хоткеев)
kortalk "Переведи на английский:" # popup с разовым промптом
kortalk --window # окно в два столбца (алиас: --split)
kortalk --provider ollama # разовый запрос через конкретный провайдер
kortalk --settings # настройки
kortalk --quit # завершить работающий экземпляр
kortalk --check # диагностика
Основной сценарий: kortalk запускает демона, дальше всё делается из трея
и по глобальным хоткеям. CLI-флаги оставлены для скриптов — они мгновенно
доставляются работающему экземпляру через локальный сокет.
Текст берётся из PRIMARY selection — достаточно выделить его мышью, Ctrl+C не нужен.
Хоткеи
Назначаются в Настройки → Клавиши, работают глобально:
- X11 — приложение перехватывает клавиши напрямую (XGrabKey), работает в любом WM/DE без настройки.
- Wayland — используется XDG Desktop Portal (GlobalShortcuts);
GNOME/KDE покажут диалог подтверждения биндинга. Если портал недоступен
(минималистичные композиторы) — пользуйтесь треем или повесьте
kortalk --popupна хоткей средствами композитора.
Настройка провайдеров
kortalk --settings → вкладка «Провайдеры». Примеры:
| Провайдер | Тип | Base URL | Модель |
|---|---|---|---|
| Claude Code CLI | claude-cli | — | (пусто = дефолт CLI) |
| Anthropic API | anthropic | — | claude-opus-4-8 |
| OpenAI | openai | https://api.openai.com/v1 |
gpt-4o |
| Ollama | openai | http://localhost:11434/v1 |
llama3, qwen3, … |
| LM Studio | openai | http://localhost:1234/v1 |
имя загруженной модели |
| OpenRouter | openai | https://openrouter.ai/api/v1 |
любой из каталога |
«Активный провайдер» используется по умолчанию для popup; в окне провайдер
выбирается в выпадающем списке, разово — флагом --provider <id>.
Автозапуск
Настройки → Общие → «Запускать при входе в систему» — создаёт
~/.config/autostart/kortalk.desktop с командой kortalk.
Разработка
python3 -m venv .venv && .venv/bin/pip install -e .
QT_QPA_PLATFORM=offscreen .venv/bin/kortalk --check # headless-проверка
Структура: src/kortalk/ — app.py (CLI, трей, IPC),
providers.py (воркеры ИИ), hotkeys.py (XGrabKey / портал),
windows.py (popup и главное окно), settings_dialog.py, config.py,
theme.py.
Лицензия
MIT, см. LICENSE.
Разработка
git clone https://github.com/r4ven-me/kortalk && cd kortalk
python -m venv .venv && . .venv/bin/activate
pip install -e '.[test]' ruff
ruff check . # линтер
QT_QPA_PLATFORM=offscreen pytest # тесты (headless)
Логи работающего приложения: ~/.local/state/kortalk/kortalk.log
(подробный вывод — флаг --debug).
Project details
Release history Release notifications | RSS feed
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 kortalk-0.4.0.tar.gz.
File metadata
- Download URL: kortalk-0.4.0.tar.gz
- Upload date:
- Size: 37.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05f00c5bcc47301206bc97b494c23259c4cb9254900f469265f8bd22f2fcb490
|
|
| MD5 |
7e599ea6c7c97ca4eb5bd15c20611478
|
|
| BLAKE2b-256 |
1716ed7af06501ec3975fdcda76252db28df13c66532db7e9804bddda4bd7559
|
Provenance
The following attestation bundles were made for kortalk-0.4.0.tar.gz:
Publisher:
publish.yml on r4ven-me/kortalk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kortalk-0.4.0.tar.gz -
Subject digest:
05f00c5bcc47301206bc97b494c23259c4cb9254900f469265f8bd22f2fcb490 - Sigstore transparency entry: 2194857591
- Sigstore integration time:
-
Permalink:
r4ven-me/kortalk@b462444ee70c2f981e4dac17be4af0c87ef22cbd -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/r4ven-me
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b462444ee70c2f981e4dac17be4af0c87ef22cbd -
Trigger Event:
push
-
Statement type:
File details
Details for the file kortalk-0.4.0-py3-none-any.whl.
File metadata
- Download URL: kortalk-0.4.0-py3-none-any.whl
- Upload date:
- Size: 37.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b189d2af4e8ec8f1394843687c22a68ca31a70dd304f58b3c25d58ea3f56a4ac
|
|
| MD5 |
d33d526cb0ad331dcfc9a8be1dbaace4
|
|
| BLAKE2b-256 |
4a205c649f8deed1d510d56f348f5e124f4d769499df601ebfc668b989e73771
|
Provenance
The following attestation bundles were made for kortalk-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on r4ven-me/kortalk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kortalk-0.4.0-py3-none-any.whl -
Subject digest:
b189d2af4e8ec8f1394843687c22a68ca31a70dd304f58b3c25d58ea3f56a4ac - Sigstore transparency entry: 2194857593
- Sigstore integration time:
-
Permalink:
r4ven-me/kortalk@b462444ee70c2f981e4dac17be4af0c87ef22cbd -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/r4ven-me
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b462444ee70c2f981e4dac17be4af0c87ef22cbd -
Trigger Event:
push
-
Statement type: