cliskill 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +245 -484
- package/dist/bootstrap/cli.js +2 -2
- package/dist/{chunk-AJENHWD3.js → chunk-S7IQHES2.js} +1 -1
- package/dist/chunk-S7IQHES2.js.map +1 -0
- package/dist/{chunk-SDHXIBKZ.js → chunk-V73UZD27.js} +21 -7
- package/dist/chunk-V73UZD27.js.map +1 -0
- package/dist/index.d.ts +14 -10
- package/dist/index.js +2 -2
- package/dist/{paths-OODUHG6V.js → paths-FVFXSRUD.js} +2 -2
- package/package.json +1 -1
- package/dist/chunk-AJENHWD3.js.map +0 -1
- package/dist/chunk-SDHXIBKZ.js.map +0 -1
- /package/dist/{paths-OODUHG6V.js.map → paths-FVFXSRUD.js.map} +0 -0
package/README.md
CHANGED
|
@@ -1,239 +1,144 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# cliskill
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Universal Terminal AI CLI**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Свободный AI-ассистент для терминала с поддержкой любых LLM провайдеров.
|
|
8
8
|
|
|
9
|
-
[ · [Без подписок](#) · [Без vendor lock-in](#) · [Универсальный](#)
|
|
9
|
+
[](https://www.npmjs.com/package/cliskill)
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[]()
|
|
14
12
|
|
|
15
13
|
</div>
|
|
16
14
|
|
|
17
15
|
---
|
|
18
16
|
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
- [О проекте](#-о-проекте)
|
|
22
|
-
- [Возможности](#-возможности)
|
|
23
|
-
- [Быстрый старт](#-быстрый-старт)
|
|
24
|
-
- [Использование](#-использование)
|
|
25
|
-
- [Конфигурация](#-конфигурация)
|
|
26
|
-
- [Инструменты](#-инструменты)
|
|
27
|
-
- [MCP серверы](#-mcp-серверы)
|
|
28
|
-
- [Агентская система](#-агентская-система)
|
|
29
|
-
- [Архитектура](#-архитектура)
|
|
30
|
-
- [API провайдеры](#-api-провайдеры)
|
|
31
|
-
- [Разработка](#-разработка)
|
|
32
|
-
- [Технологии](#-технологии)
|
|
33
|
-
- [Лицензия](#-лицензия)
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 🧠 О проекте
|
|
38
|
-
|
|
39
|
-
**cliskill** — это универсальный AI-ассистент для терминала, который работает с **любым** LLM провайдером через стандартный `/chat/completions` API. Никакой привязки к конкретному вендору: используйте локальные модели, облачные API или собственные серверы.
|
|
17
|
+
## Что это
|
|
40
18
|
|
|
41
|
-
|
|
19
|
+
cliskill — CLI-инструмент для работы с LLM прямо из терминала. Подключает любого провайдера через стандартный `/chat/completions` API, даёт 22 встроенных инструментов, мульти-агентную координацию и MCP-интеграцию. Без подписок, без vendor lock-in.
|
|
42
20
|
|
|
43
|
-
|
|
44
|
-
|---------|----------|
|
|
45
|
-
| 🆓 **Бесплатный** | Никаких подписок и ограничений по функциям |
|
|
46
|
-
| 🔓 **Открытый** | Полный исходный код, MIT лицензия |
|
|
47
|
-
| 🔌 **Универсальный** | Любой `/chat/completions` совместимый API |
|
|
48
|
-
| 🚫 **Без vendor lock-in** | Легко переключайтесь между провайдерами |
|
|
49
|
-
| 🤖 **Агентский** | 15 инструментов, мульти-агентная координация |
|
|
50
|
-
| 🛡️ **Безопасный** | Настраиваемые уровни доверия и разрешения |
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## ✨ Возможности
|
|
55
|
-
|
|
56
|
-
### 🔌 Провайдеры и модели
|
|
57
|
-
|
|
58
|
-
- **Универсальная система провайдеров** — подключение любого `/chat/completions` API
|
|
59
|
-
- **Алиасы моделей** — предустановленные алиасы: `smart`, `fast`, `balanced`, `reasoning`, `code`
|
|
60
|
-
- **1M токенов контекста** — по умолчанию, настраиваемый лимит
|
|
61
|
-
- **Автоматический fallback** — переключение на резервные модели при ошибках
|
|
62
|
-
- **Rate Limit Handler** — корректная обработка лимитов без upsell
|
|
63
|
-
|
|
64
|
-
### 🏗️ Инфраструктура
|
|
65
|
-
|
|
66
|
-
| Система | Описание |
|
|
67
|
-
|---------|----------|
|
|
68
|
-
| 🎨 **Theme System** | 6 тем оформления, включая daltonized для дальтоников |
|
|
69
|
-
| ⏰ **Cron Scheduler** | Отложенные и повторяющиеся задачи по расписанию |
|
|
70
|
-
| ⌨️ **Keybinding System** | 10 контекстов, 50+ хоткеев, полностью настраиваемые |
|
|
71
|
-
| 🩺 **Doctor Diagnostic** | Автоматическая диагностика окружения |
|
|
72
|
-
| 🪝 **Hooks System** | Pre/post hooks для кастомизации поведения |
|
|
73
|
-
| 📡 **MCP Client** | Model Context Protocol для расширения возможностей |
|
|
74
|
-
| 📚 **Skills System** | Markdown-навыки для расширения функциональности |
|
|
75
|
-
| 🧠 **Memory** | Basic + Enhanced память с TF-IDF индексацией |
|
|
76
|
-
|
|
77
|
-
### 🛠️ Утилиты
|
|
78
|
-
|
|
79
|
-
- 🎬 **Asciicast Recording** — запись сессий в формате asciicast v2
|
|
80
|
-
- 🎨 **ANSI→SVG** — рендеринг терминального вывода в SVG
|
|
81
|
-
- 🔄 **Conversation Recovery** — умное восстановление сессий с ремонтом
|
|
82
|
-
- 🔗 **Deep Links** — протокол `cliskill://` для интеграции с ОС
|
|
83
|
-
- 🧹 **Background Housekeeping** — автоматическая очистка и обслуживание
|
|
84
|
-
- 🔀 **Tool Pool** — слияние и фильтрация наборов инструментов
|
|
85
|
-
- 💰 **Cost Tracker** — отслеживание расходов на API
|
|
86
|
-
- 📊 **Token Estimation** — оценка токенов перед отправкой
|
|
87
|
-
- 📦 **Context Compaction** — автоматическое сжатие контекста
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## 📦 Быстрый старт
|
|
92
|
-
|
|
93
|
-
### Установка из исходников
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
# Клонирование репозитория
|
|
97
|
-
git clone https://github.com/nic11/cliskill.git
|
|
98
|
-
cd cliskill
|
|
99
|
-
|
|
100
|
-
# Установка зависимостей
|
|
101
|
-
npm install
|
|
102
|
-
|
|
103
|
-
# Сборка проекта
|
|
104
|
-
npm run build
|
|
105
|
-
|
|
106
|
-
# Глобальная установка (опционально)
|
|
107
|
-
npm link
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Установка из npm
|
|
21
|
+
## Быстрый старт
|
|
111
22
|
|
|
112
23
|
```bash
|
|
113
24
|
npm install -g cliskill
|
|
25
|
+
cliskill
|
|
114
26
|
```
|
|
115
27
|
|
|
116
|
-
|
|
28
|
+
Первый запуск запустит интерактивный мастер настройки — выберете провайдера, API-ключ, модель.
|
|
117
29
|
|
|
118
|
-
|
|
119
|
-
- **npm** >= 9.0.0
|
|
30
|
+
Требования: Node.js >= 20.0.0
|
|
120
31
|
|
|
121
|
-
###
|
|
32
|
+
### Из исходников
|
|
122
33
|
|
|
123
34
|
```bash
|
|
124
|
-
|
|
125
|
-
cliskill
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
cliskill --base-url https://api.example.com/v1 --api-key your-key
|
|
35
|
+
git clone https://github.com/nic11/cliskill.git
|
|
36
|
+
cd cliskill
|
|
37
|
+
npm install && npm run build
|
|
38
|
+
npm link
|
|
129
39
|
```
|
|
130
40
|
|
|
131
41
|
---
|
|
132
42
|
|
|
133
|
-
##
|
|
43
|
+
## Использование
|
|
134
44
|
|
|
135
|
-
###
|
|
45
|
+
### CLI
|
|
136
46
|
|
|
137
47
|
```bash
|
|
138
|
-
#
|
|
48
|
+
# Интерактивный REPL
|
|
139
49
|
cliskill
|
|
140
50
|
|
|
141
|
-
#
|
|
51
|
+
# Одноразовый запрос
|
|
142
52
|
cliskill --prompt "исправь тесты"
|
|
143
53
|
|
|
144
|
-
#
|
|
54
|
+
# Алиасы моделей
|
|
145
55
|
cliskill --model smart
|
|
146
56
|
cliskill --model fast
|
|
147
|
-
cliskill --model
|
|
57
|
+
cliskill --model reasoning
|
|
148
58
|
|
|
149
|
-
#
|
|
150
|
-
cliskill --auto # safe-auto
|
|
59
|
+
# Auto mode
|
|
60
|
+
cliskill --auto # safe-auto
|
|
151
61
|
cliskill --auto-mode full-auto # полная автономия
|
|
152
|
-
cliskill --auto-mode safe-auto # безопасная автономия
|
|
153
|
-
cliskill --auto-mode ask # с подтверждением
|
|
154
|
-
|
|
155
|
-
# ⚡ Fast mode
|
|
156
|
-
cliskill --fast
|
|
157
62
|
|
|
158
|
-
#
|
|
159
|
-
cliskill --resume
|
|
160
|
-
cliskill --resume abc12345
|
|
63
|
+
# Восстановление сессии
|
|
64
|
+
cliskill --resume
|
|
65
|
+
cliskill --resume abc12345
|
|
161
66
|
|
|
162
|
-
#
|
|
163
|
-
cliskill --record
|
|
164
|
-
cliskill --record --record-output ./my-session.cast
|
|
165
|
-
|
|
166
|
-
# 🎨 Выбор темы
|
|
67
|
+
# Тема оформления
|
|
167
68
|
cliskill --theme dark
|
|
168
|
-
cliskill --theme light
|
|
169
|
-
cliskill --theme dark-daltonized
|
|
170
|
-
cliskill --theme light-daltonized
|
|
171
|
-
cliskill --theme dark-ansi
|
|
172
|
-
cliskill --theme light-ansi
|
|
173
|
-
cliskill --theme auto
|
|
174
|
-
|
|
175
|
-
# 🖥️ React TUI (Ink)
|
|
176
|
-
cliskill --tui
|
|
177
|
-
|
|
178
|
-
# 🔗 Удалённый сервер
|
|
179
|
-
cliskill --remote user@host
|
|
180
69
|
|
|
181
|
-
#
|
|
182
|
-
cliskill --
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
### Подкоманды
|
|
70
|
+
# React TUI
|
|
71
|
+
cliskill --tui
|
|
186
72
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
cliskill doctor
|
|
190
|
-
|
|
191
|
-
# 📋 Список сессий
|
|
192
|
-
cliskill sessions
|
|
193
|
-
|
|
194
|
-
# ⏰ Cron задачи
|
|
195
|
-
cliskill cron list # список задач
|
|
196
|
-
cliskill cron add "0 9 * * 1-5" "запустить тесты" # добавить задачу
|
|
197
|
-
cliskill cron add "@daily" "отчёт" --one-shot # одноразовая задача
|
|
198
|
-
cliskill cron remove <id> # удалить задачу
|
|
199
|
-
cliskill cron run <id> # запустить вручную
|
|
200
|
-
|
|
201
|
-
# 🔗 Deep Links
|
|
202
|
-
cliskill register-protocol # зарегистрировать cliskill://
|
|
203
|
-
cliskill unregister-protocol # отменить регистрацию
|
|
204
|
-
cliskill open-uri "cliskill://prompt?text=hello" # обработать URI
|
|
73
|
+
# Запись сессии
|
|
74
|
+
cliskill --record
|
|
205
75
|
```
|
|
206
76
|
|
|
207
|
-
###
|
|
77
|
+
### Опции
|
|
208
78
|
|
|
209
79
|
| Опция | Описание |
|
|
210
80
|
|-------|----------|
|
|
211
|
-
| `-m, --model <model>` | Модель или алиас
|
|
81
|
+
| `-m, --model <model>` | Модель или алиас |
|
|
212
82
|
| `--base-url <url>` | URL API провайдера |
|
|
213
|
-
| `--api-key <key>` | API ключ
|
|
83
|
+
| `--api-key <key>` | API ключ |
|
|
214
84
|
| `-p, --prompt <text>` | Одноразовый запрос |
|
|
215
|
-
| `--
|
|
216
|
-
| `--tui` | React TUI (Ink) вместо базового REPL |
|
|
85
|
+
| `--tui` | React TUI вместо базового REPL |
|
|
217
86
|
| `--verbose` | Подробное логирование |
|
|
218
87
|
| `--auto` | Auto mode (safe-auto) |
|
|
219
|
-
| `--auto-mode <level>` |
|
|
88
|
+
| `--auto-mode <level>` | full-auto / safe-auto / ask |
|
|
220
89
|
| `--fast` | Быстрый режим |
|
|
221
|
-
| `--max-context <tokens>` |
|
|
222
|
-
| `--remote <host>` | Подключение к удалённому серверу (SSH) |
|
|
90
|
+
| `--max-context <tokens>` | Лимит контекста |
|
|
223
91
|
| `--theme <name>` | Цветовая тема |
|
|
224
|
-
| `--record` | Запись сессии (asciicast v2) |
|
|
225
|
-
| `--record-output <path>` | Путь к файлу записи |
|
|
226
92
|
| `--resume [id]` | Восстановить сессию |
|
|
227
|
-
|
|
|
228
|
-
|
|
|
93
|
+
| `--record` | Запись в asciicast v2 |
|
|
94
|
+
| `--remote <host>` | SSH подключение |
|
|
95
|
+
|
|
96
|
+
### Подкоманды
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
cliskill doctor # Диагностика окружения
|
|
100
|
+
cliskill sessions # Список сессий
|
|
101
|
+
cliskill cron list # Cron задачи
|
|
102
|
+
cliskill cron add "0 9 * * 1-5" "запустить тесты"
|
|
103
|
+
```
|
|
229
104
|
|
|
230
105
|
---
|
|
231
106
|
|
|
232
|
-
##
|
|
107
|
+
## Провайдеры
|
|
233
108
|
|
|
234
|
-
|
|
109
|
+
Работает с любым API, совместимым с OpenAI `/chat/completions`, а также с Anthropic Messages API.
|
|
235
110
|
|
|
236
|
-
|
|
111
|
+
| Провайдер | Base URL | Формат |
|
|
112
|
+
|-----------|----------|--------|
|
|
113
|
+
| OpenAI | `https://api.openai.com/v1` | `openai-compatible` |
|
|
114
|
+
| Anthropic Claude | `https://api.anthropic.com` | `anthropic-compatible` |
|
|
115
|
+
| GLM / Z.AI | `https://api.z.ai/api/coding/paas/v4` | `openai-compatible` |
|
|
116
|
+
| DeepSeek | `https://api.deepseek.com/v1` | `openai-compatible` |
|
|
117
|
+
| Ollama | `http://localhost:11434/v1` | `openai-compatible` |
|
|
118
|
+
| LM Studio | `http://localhost:1234/v1` | `openai-compatible` |
|
|
119
|
+
| Любой другой | `<your-endpoint>/v1` | `openai-compatible` |
|
|
120
|
+
|
|
121
|
+
### Алиасы моделей
|
|
122
|
+
|
|
123
|
+
| Алиас | Описание |
|
|
124
|
+
|-------|----------|
|
|
125
|
+
| `smart` | Максимальное качество |
|
|
126
|
+
| `fast` | Быстрые ответы |
|
|
127
|
+
| `balanced` | Баланс качества и скорости |
|
|
128
|
+
| `reasoning` | Логические задачи |
|
|
129
|
+
| `code` | Код-специфичные задачи |
|
|
130
|
+
|
|
131
|
+
Настраиваются в `.cliskillrc.json` → `models.aliases`.
|
|
132
|
+
|
|
133
|
+
### Fallback chain
|
|
134
|
+
|
|
135
|
+
При ошибках автоматически переключается на резервные модели. Настраивается через `fallbackModels` в конфигурации провайдера.
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## Конфигурация
|
|
140
|
+
|
|
141
|
+
Файл `.cliskillrc.json` в домашней директории или в корне проекта:
|
|
237
142
|
|
|
238
143
|
```json
|
|
239
144
|
{
|
|
@@ -249,27 +154,14 @@ cliskill open-uri "cliskill://prompt?text=hello" # обработать URI
|
|
|
249
154
|
}
|
|
250
155
|
],
|
|
251
156
|
"permissionMode": "ask",
|
|
252
|
-
"verbose": false,
|
|
253
157
|
"maxContextTokens": 1000000,
|
|
254
|
-
"theme": {
|
|
255
|
-
|
|
256
|
-
},
|
|
257
|
-
"autoMode": {
|
|
258
|
-
"enabled": false,
|
|
259
|
-
"trustLevel": "safe-auto"
|
|
260
|
-
},
|
|
261
|
-
"fastMode": {
|
|
262
|
-
"enabled": false
|
|
263
|
-
},
|
|
158
|
+
"theme": { "name": "dark" },
|
|
159
|
+
"autoMode": { "enabled": false, "trustLevel": "safe-auto" },
|
|
264
160
|
"models": {
|
|
265
161
|
"aliases": [
|
|
266
162
|
{ "alias": "smart", "model": "gpt-4o" },
|
|
267
|
-
{ "alias": "fast", "model": "gpt-4o-mini" }
|
|
268
|
-
|
|
269
|
-
{ "alias": "reasoning", "model": "o1" },
|
|
270
|
-
{ "alias": "code", "model": "gpt-4o" }
|
|
271
|
-
],
|
|
272
|
-
"maxContextTokens": 1000000
|
|
163
|
+
{ "alias": "fast", "model": "gpt-4o-mini" }
|
|
164
|
+
]
|
|
273
165
|
}
|
|
274
166
|
}
|
|
275
167
|
```
|
|
@@ -277,90 +169,64 @@ cliskill open-uri "cliskill://prompt?text=hello" # обработать URI
|
|
|
277
169
|
### Переменные окружения
|
|
278
170
|
|
|
279
171
|
```bash
|
|
280
|
-
|
|
281
|
-
|
|
172
|
+
CLISKILL_API_KEY="your-api-key"
|
|
173
|
+
CLISKILL_BASE_URL="https://api.example.com/v1"
|
|
174
|
+
ANTHROPIC_API_KEY="your-anthropic-key"
|
|
175
|
+
ANTHROPIC_BASE_URL="https://api.anthropic.com"
|
|
282
176
|
```
|
|
283
177
|
|
|
284
|
-
### Форматы провайдеров
|
|
285
|
-
|
|
286
|
-
| Формат | Описание |
|
|
287
|
-
|--------|----------|
|
|
288
|
-
| `openai-compatible` | Любой `/v1/chat/completions` endpoint |
|
|
289
|
-
| `messages-compatible` | Messages API формат (compat adapter) |
|
|
290
|
-
| `custom` | Кастомный адаптер (программная регистрация) |
|
|
291
|
-
|
|
292
178
|
### Режимы разрешений
|
|
293
179
|
|
|
294
|
-
| Режим |
|
|
295
|
-
|
|
296
|
-
| `ask` | Подтверждение каждой операции
|
|
297
|
-
| `auto-accept` |
|
|
180
|
+
| Режим | Поведение |
|
|
181
|
+
|-------|-----------|
|
|
182
|
+
| `ask` | Подтверждение каждой операции |
|
|
183
|
+
| `auto-accept` | Всё без подтверждения |
|
|
298
184
|
| `plan` | Только операции чтения |
|
|
299
185
|
|
|
300
|
-
### Навыки (Skills)
|
|
301
|
-
|
|
302
|
-
Создавайте файлы навыков в директории `.cliskill/skills/`:
|
|
303
|
-
|
|
304
|
-
```markdown
|
|
305
|
-
---
|
|
306
|
-
name: my-skill
|
|
307
|
-
description: Описание навыка
|
|
308
186
|
---
|
|
309
187
|
|
|
310
|
-
|
|
188
|
+
## Инструменты
|
|
189
|
+
|
|
190
|
+
15 встроенных инструментов:
|
|
191
|
+
|
|
192
|
+
| Инструмент | Описание |
|
|
193
|
+
|------------|----------|
|
|
194
|
+
| **Bash** | Выполнение shell команд с инспекцией безопасности |
|
|
195
|
+
| **File Read** | Чтение файлов с поддержкой изображений |
|
|
196
|
+
| **File Write** | Создание и перезапись файлов |
|
|
197
|
+
| **File Edit** | Точечное редактирование (search/replace) |
|
|
198
|
+
| **Glob** | Поиск файлов по паттернам |
|
|
199
|
+
| **Grep** | Поиск текста с regex |
|
|
200
|
+
| **Web Search** | Веб-поиск |
|
|
201
|
+
| **Web Fetch** | Загрузка и парсинг веб-страниц |
|
|
202
|
+
| **Agent** | Порождение суб-агентов |
|
|
203
|
+
| **LSP** | Language Server Protocol интеграция |
|
|
204
|
+
| **Todo Write** | Управление списками задач |
|
|
205
|
+
| **Computer Use** | Управление мышью и клавиатурой |
|
|
206
|
+
| **Remote** | SSH команды на удалённых серверах |
|
|
207
|
+
| **Worktree** | Git worktree для параллельной работы |
|
|
208
|
+
| **Plan Mode** | Планирование с параллельными агентами |
|
|
209
|
+
|
|
210
|
+
Дополнительно: **Tool Search** — поиск инструментов по имени и описанию, **Background Bash** — фоновые задачи, **Task List / Task Stop** — управление задачами.
|
|
311
211
|
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
---
|
|
212
|
+
### Безопасность
|
|
316
213
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
cliskill включает 15 встроенных инструментов для полноценной работы:
|
|
320
|
-
|
|
321
|
-
| # | Инструмент | Описание | Категория |
|
|
322
|
-
|---|------------|----------|-----------|
|
|
323
|
-
| 1 | 🖥️ **Bash** | Выполнение shell команд с инспекцией безопасности | Выполнение |
|
|
324
|
-
| 2 | 📄 **File Read** | Чтение файлов с поддержкой изображений | Файлы |
|
|
325
|
-
| 3 | ✏️ **File Write** | Создание и перезапись файлов | Файлы |
|
|
326
|
-
| 4 | 📝 **File Edit** | Точечное редактирование файлов (search/replace) | Файлы |
|
|
327
|
-
| 5 | 🔍 **Glob** | Поиск файлов по паттернам | Поиск |
|
|
328
|
-
| 6 | 🔎 **Grep** | Поиск текста с поддержкой regex | Поиск |
|
|
329
|
-
| 7 | 🌐 **Web Search** | Веб-поиск через поисковые системы | Веб |
|
|
330
|
-
| 8 | 🌍 **Web Fetch** | Загрузка и парсинг веб-страниц | Веб |
|
|
331
|
-
| 9 | 🤖 **Agent** | Порождение суб-агентов для подзадач | Агенты |
|
|
332
|
-
| 10 | 📡 **LSP** | Интеграция с Language Server Protocol | IDE |
|
|
333
|
-
| 11 | ✅ **Todo Write** | Управление списками задач | Планирование |
|
|
334
|
-
| 12 | 🖱️ **Computer Use** | Управление мышью и клавиатурой | Автоматизация |
|
|
335
|
-
| 13 | 🔗 **Remote** | Выполнение команд на удалённых серверах через SSH | Удалённый доступ |
|
|
336
|
-
| 14 | 🌳 **Worktree** | Управление git worktree для параллельной работы | Git |
|
|
337
|
-
| 15 | 📋 **Plan Mode** | Планирование с 3 параллельными агентами | Планирование |
|
|
338
|
-
|
|
339
|
-
### Безопасность инструментов
|
|
340
|
-
|
|
341
|
-
Инструменты классифицируются по уровню безопасности:
|
|
342
|
-
|
|
343
|
-
- **readOnly** (Glob, Grep, File Read, LSP) — могут выполняться параллельно
|
|
344
|
-
- **write** (File Write, File Edit, Bash) — выполняются эксклюзивно
|
|
214
|
+
- **readOnly** (Glob, Grep, File Read, LSP) — параллельное выполнение
|
|
215
|
+
- **write** (File Write, File Edit, Bash) — эксклюзивное выполнение
|
|
345
216
|
- **network** (Web Search, Web Fetch) — контролируемые сетевые операции
|
|
217
|
+
- Динамическая проверка `concurrencySafe` per-input
|
|
346
218
|
|
|
347
219
|
---
|
|
348
220
|
|
|
349
|
-
##
|
|
350
|
-
|
|
351
|
-
**MCP (Model Context Protocol)** — открытый протокол для подключения внешних инструментов к AI-ассистентам. cliskill автоматически запускает MCP-серверы при старте и регистрирует их инструменты как доступные для модели.
|
|
221
|
+
## MCP (Model Context Protocol)
|
|
352
222
|
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
1. cliskill читает `mcpServers` из конфига
|
|
356
|
-
2. Запускает каждый сервер как дочерний процесс (stdio transport)
|
|
357
|
-
3. Получает список инструментов через `tools/list`
|
|
358
|
-
4. Регистрирует их в ToolRegistry с префиксом `mcp_{serverName}_`
|
|
359
|
-
5. Модель может вызывать MCP-инструменты наравне со встроенными
|
|
223
|
+
Подключение внешних инструментов через открытый протокол MCP. Серверы запускаются как дочерние процессы (stdio transport), инструменты регистрируются с префиксом `mcp_{serverName}_`.
|
|
360
224
|
|
|
361
225
|
### Настройка
|
|
362
226
|
|
|
363
|
-
|
|
227
|
+
Поддерживаются два формата конфигурации — **массив** (нативный) и **объект** (Claude/Cursor совместимый):
|
|
228
|
+
|
|
229
|
+
**Формат массива:**
|
|
364
230
|
|
|
365
231
|
```json
|
|
366
232
|
{
|
|
@@ -370,282 +236,177 @@ cliskill включает 15 встроенных инструментов дл
|
|
|
370
236
|
"command": "npx",
|
|
371
237
|
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"],
|
|
372
238
|
"transport": "stdio"
|
|
239
|
+
}
|
|
240
|
+
]
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
**Формат объекта (Claude/Cursor совместимый):**
|
|
245
|
+
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"mcpServers": {
|
|
249
|
+
"filesystem": {
|
|
250
|
+
"command": "npx",
|
|
251
|
+
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
|
|
373
252
|
},
|
|
374
|
-
{
|
|
375
|
-
"name": "github",
|
|
253
|
+
"github": {
|
|
376
254
|
"command": "npx",
|
|
377
255
|
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
378
|
-
"env": {
|
|
379
|
-
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token"
|
|
380
|
-
},
|
|
381
|
-
"transport": "stdio"
|
|
256
|
+
"env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_token" }
|
|
382
257
|
}
|
|
383
|
-
|
|
258
|
+
}
|
|
384
259
|
}
|
|
385
260
|
```
|
|
386
261
|
|
|
387
|
-
|
|
262
|
+
В объектном формате ключ становится `name`, а `transport` по умолчанию `stdio`.
|
|
263
|
+
|
|
264
|
+
### Поля
|
|
388
265
|
|
|
389
266
|
| Поле | Тип | Обязательное | Описание |
|
|
390
267
|
|------|-----|:---:|----------|
|
|
391
|
-
| `name` | string |
|
|
392
|
-
| `command` | string |
|
|
393
|
-
| `args` | string[] |
|
|
394
|
-
| `env` | object |
|
|
395
|
-
| `transport` | string |
|
|
396
|
-
|
|
397
|
-
### Популярные MCP-серверы
|
|
398
|
-
|
|
399
|
-
| Сервер | Пакет | Назначение |
|
|
400
|
-
|--------|-------|------------|
|
|
401
|
-
| Filesystem | `@modelcontextprotocol/server-filesystem` | Доступ к файловой системе |
|
|
402
|
-
| GitHub | `@modelcontextprotocol/server-github` | Работа с GitHub API |
|
|
403
|
-
| PostgreSQL | `@modelcontextprotocol/server-postgres` | Запросы к PostgreSQL |
|
|
404
|
-
| Brave Search | `@modelcontextprotocol/server-brave-search` | Веб-поиск через Brave |
|
|
405
|
-
| Memory | `@modelcontextprotocol/server-memory` | Память между сессиями |
|
|
406
|
-
| Puppeteer | `@modelcontextprotocol/server-puppeteer` | Управление браузером |
|
|
407
|
-
|
|
408
|
-
### Безопасность
|
|
268
|
+
| `name` | string | да* | Уникальное имя (авто из ключа объекта) |
|
|
269
|
+
| `command` | string | да | Команда запуска |
|
|
270
|
+
| `args` | string[] | нет | Аргументы |
|
|
271
|
+
| `env` | object | нет | Переменные окружения |
|
|
272
|
+
| `transport` | string | нет | Транспорт (stdio по умолчанию) |
|
|
409
273
|
|
|
410
|
-
|
|
411
|
-
- Серверы запускаются с переменными окружения из конфига (не из системы)
|
|
412
|
-
- При ошибке подключения сервер пропускается, остальные продолжают работу
|
|
274
|
+
### Популярные серверы
|
|
413
275
|
|
|
414
|
-
|
|
276
|
+
`@modelcontextprotocol/server-filesystem` — файловая система, `server-github` — GitHub API, `server-postgres` — PostgreSQL, `server-brave-search` — веб-поиск, `server-memory` — память между сессиями, `server-puppeteer` — управление браузером.
|
|
415
277
|
|
|
416
|
-
|
|
278
|
+
---
|
|
417
279
|
|
|
418
|
-
|
|
280
|
+
## Агентская система
|
|
419
281
|
|
|
420
|
-
|
|
421
|
-
|---------|----------|---------------|
|
|
422
|
-
| `full-auto` | Полная автономия | Все действия без подтверждения |
|
|
423
|
-
| `safe-auto` | Безопасная автономия | Только потенциально опасные операции |
|
|
424
|
-
| `ask` | Ручное управление | Каждое действие (по умолчанию) |
|
|
282
|
+
### Agent Loop
|
|
425
283
|
|
|
426
|
-
|
|
284
|
+
Ядро — агентский цикл с streaming, параллельным tool calling, error recovery и автоматическим сжатием контекста.
|
|
427
285
|
|
|
428
|
-
-
|
|
429
|
-
- **Multi-Agent Plan Mode V2** — 3 параллельных агента для планирования
|
|
430
|
-
- **Swarm Coordinator** — мульти-агентная координация сложных задач
|
|
431
|
-
- **Task System** — фоновые задачи с отслеживанием статуса
|
|
286
|
+
### Multi-Agent
|
|
432
287
|
|
|
433
|
-
|
|
288
|
+
- **Agent Tool** — порождение суб-агентов с `AsyncLocalStorage`-трекингом контекста
|
|
289
|
+
- **Plan Mode** — 3 параллельных агента для планирования
|
|
290
|
+
- **Swarm Coordinator** — мульти-агентная координация
|
|
291
|
+
- **Task System** — фоновые задачи с EventEmitter, `createTask`/`startTask`, `executeAgentTask`/`executeShellTask`
|
|
434
292
|
|
|
435
|
-
|
|
293
|
+
### Auto Mode
|
|
436
294
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
-
|
|
440
|
-
-
|
|
295
|
+
| Уровень | Поведение |
|
|
296
|
+
|---------|-----------|
|
|
297
|
+
| `full-auto` | Полная автономия |
|
|
298
|
+
| `safe-auto` | Подтверждение только опасных операций |
|
|
299
|
+
| `ask` | Подтверждение каждого действия |
|
|
441
300
|
|
|
442
301
|
---
|
|
443
302
|
|
|
444
|
-
##
|
|
303
|
+
## Архитектура
|
|
445
304
|
|
|
446
305
|
```
|
|
447
306
|
src/
|
|
448
|
-
├──
|
|
449
|
-
├──
|
|
450
|
-
├──
|
|
451
|
-
├──
|
|
452
|
-
├──
|
|
453
|
-
├──
|
|
454
|
-
├──
|
|
455
|
-
├──
|
|
456
|
-
├──
|
|
457
|
-
├──
|
|
458
|
-
├──
|
|
459
|
-
├──
|
|
460
|
-
├──
|
|
461
|
-
├──
|
|
462
|
-
├──
|
|
463
|
-
├──
|
|
464
|
-
└──
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
### Диаграмма взаимодействия
|
|
468
|
-
|
|
469
|
-
```mermaid
|
|
470
|
-
graph TB
|
|
471
|
-
CLI[CLI Entry] --> Config[Config Loader]
|
|
472
|
-
CLI --> REPL[REPL / TUI]
|
|
473
|
-
REPL --> Core[Agent Loop]
|
|
474
|
-
Core --> Provider[Provider Adapter]
|
|
475
|
-
Core --> Tools[Tool System]
|
|
476
|
-
Core --> Memory[Memory Store]
|
|
477
|
-
Core --> Safety[Safety Layer]
|
|
478
|
-
Tools --> Bash[Bash Tool]
|
|
479
|
-
Tools --> Files[File Tools]
|
|
480
|
-
Tools --> Web[Web Tools]
|
|
481
|
-
Tools --> Agent[Agent Tool]
|
|
482
|
-
Tools --> LSP[LSP Tool]
|
|
483
|
-
Tools --> Remote[Remote Tool]
|
|
484
|
-
Core --> Hooks[Hooks System]
|
|
485
|
-
Core --> MCP[MCP Client]
|
|
486
|
-
Core --> Swarm[Swarm Coordinator]
|
|
487
|
-
Swarm --> Tasks[Task System]
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
### Поток данных
|
|
491
|
-
|
|
492
|
-
```mermaid
|
|
493
|
-
sequenceDiagram
|
|
494
|
-
participant U as User
|
|
495
|
-
participant R as REPL/TUI
|
|
496
|
-
participant L as Agent Loop
|
|
497
|
-
participant P as Provider Adapter
|
|
498
|
-
participant T as Tool System
|
|
499
|
-
|
|
500
|
-
U->>R: Ввод запроса
|
|
501
|
-
R->>L: Передача сообщения
|
|
502
|
-
L->>P: API запрос (streaming)
|
|
503
|
-
P-->>L: Потоковый ответ
|
|
504
|
-
L->>T: Вызов инструментов
|
|
505
|
-
T-->>L: Результат выполнения
|
|
506
|
-
L->>P: Продолжение диалога
|
|
507
|
-
P-->>L: Финальный ответ
|
|
508
|
-
L-->>R: Событие результата
|
|
509
|
-
R-->>U: Отображение ответа
|
|
307
|
+
├── bootstrap/ CLI entry point, парсинг аргументов
|
|
308
|
+
├── config/ Загрузка и валидация конфигурации
|
|
309
|
+
├── connect/ API адаптеры (OpenAI, Anthropic, GLM, Generic)
|
|
310
|
+
├── core/ Agent Loop, QueryEngine
|
|
311
|
+
├── tools/ Система инструментов (15 + MCP)
|
|
312
|
+
├── services/ Streaming executor, context compaction, cost tracker
|
|
313
|
+
├── safety/ Разрешения, Command Inspector
|
|
314
|
+
├── memory/ Memory Store + TF-IDF + project scanner
|
|
315
|
+
├── ui/ Theme, Keybindings, Ink TUI, Wizard
|
|
316
|
+
├── hooks/ Pre/post hooks
|
|
317
|
+
├── mcp/ MCP Client
|
|
318
|
+
├── swarm/ Мульти-агентная координация
|
|
319
|
+
├── tasks/ Фоновые задачи
|
|
320
|
+
├── remote/ SSH сессии
|
|
321
|
+
├── extensions/ Расширения и навыки
|
|
322
|
+
├── infra/ AbortController hierarchy, agent context, errors
|
|
323
|
+
└── utils/ Общие утилиты
|
|
510
324
|
```
|
|
511
325
|
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
## 🌐 API провайдеры
|
|
515
|
-
|
|
516
|
-
### Поддерживаемые форматы
|
|
517
|
-
|
|
518
|
-
cliskill работает с **любым** API, совместимым с OpenAI `/chat/completions`:
|
|
519
|
-
|
|
520
|
-
| Провайдер | Base URL | Формат |
|
|
521
|
-
|-----------|----------|--------|
|
|
522
|
-
| OpenAI | `https://api.openai.com/v1` | `openai-compatible` |
|
|
523
|
-
| GLM / Z.AI | `https://api.z.ai/api/coding/paas/v4` | `openai-compatible` |
|
|
524
|
-
| DeepSeek | `https://api.deepseek.com/v1` | `openai-compatible` |
|
|
525
|
-
| LocalAI | `http://localhost:8080/v1` | `openai-compatible` |
|
|
526
|
-
| Ollama | `http://localhost:11434/v1` | `openai-compatible` |
|
|
527
|
-
| LM Studio | `http://localhost:1234/v1` | `openai-compatible` |
|
|
528
|
-
| Любой другой | `<your-endpoint>/v1` | `openai-compatible` |
|
|
529
|
-
|
|
530
|
-
### Модель алиасов
|
|
531
|
-
|
|
532
|
-
Предустановленные алиасы для быстрого переключения моделей:
|
|
533
|
-
|
|
534
|
-
| Алиас | Описание | Модель по умолчанию |
|
|
535
|
-
|-------|----------|---------------------|
|
|
536
|
-
| `smart` | Максимальное качество | `gpt-4o` |
|
|
537
|
-
| `fast` | Быстрые ответы | `gpt-4o-mini` |
|
|
538
|
-
| `balanced` | Баланс качества/скорости | `gpt-4o` |
|
|
539
|
-
| `reasoning` | Логические задачи | `o1` |
|
|
540
|
-
| `code` | Код-специфичные задачи | `gpt-4o` |
|
|
326
|
+
### Ключевые подсистемы
|
|
541
327
|
|
|
542
|
-
|
|
328
|
+
| Подсистема | Что делает |
|
|
329
|
+
|------------|------------|
|
|
330
|
+
| **AbortController Hierarchy** | `WeakRef`-based child controllers, `setMaxListeners(50)`, auto-cleanup |
|
|
331
|
+
| **Progress Events** | `pendingProgress` буфер, `onToolProgress()`, реалтайм прогресс в TUI |
|
|
332
|
+
| **Context Compaction** | Multi-level с circuit breaker (3 failures), 4 уровня предупреждений |
|
|
333
|
+
| **Error Recovery** | Synthetic error results для pending tool calls при abort |
|
|
334
|
+
| **Model Fallback** | `resolveFallbackChain()`, `streamWithFallback()`, `completeWithFallback()` |
|
|
335
|
+
| **Session Recovery** | JSONL логирование, `/resume` и `/sessions` команды |
|
|
336
|
+
| **Cost Tracking** | Cache token tracking, per-model pricing (20+ моделей), budget warnings |
|
|
337
|
+
| **Permission System** | Dynamic checking, auto-approve patterns (regex), permission caching |
|
|
338
|
+
| **Batch Partitioning** | `partitionToolCalls()` — concurrent/exclusive batch'и |
|
|
543
339
|
|
|
544
340
|
---
|
|
545
341
|
|
|
546
|
-
##
|
|
547
|
-
|
|
548
|
-
### Команды
|
|
342
|
+
## Разработка
|
|
549
343
|
|
|
550
344
|
```bash
|
|
551
|
-
npm install #
|
|
552
|
-
npm run build # Сборка
|
|
553
|
-
npm run dev #
|
|
554
|
-
npm test #
|
|
555
|
-
npm run
|
|
556
|
-
npm run typecheck # Проверка типов TypeScript
|
|
557
|
-
npm run lint # Линтинг (= typecheck)
|
|
558
|
-
npm run start # Запуск собранного CLI
|
|
345
|
+
npm install # Зависимости
|
|
346
|
+
npm run build # Сборка (tsup)
|
|
347
|
+
npm run dev # Watch-режим
|
|
348
|
+
npm test # Тесты (Vitest)
|
|
349
|
+
npm run typecheck # Проверка типов
|
|
559
350
|
```
|
|
560
351
|
|
|
561
|
-
###
|
|
352
|
+
### Добавить инструмент
|
|
562
353
|
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
├── services/
|
|
568
|
-
│ ├── cron/
|
|
569
|
-
│ │ ├── parser.ts # Парсер cron-выражений
|
|
570
|
-
│ │ ├── parser.test.ts # Тесты парсера
|
|
571
|
-
│ │ ├── scheduler.ts # Планировщик
|
|
572
|
-
│ │ ├── scheduler.test.ts # Тесты планировщика
|
|
573
|
-
│ │ ├── task-store.ts # Хранилище задач
|
|
574
|
-
│ │ └── task-store.test.ts # Тесты хранилища
|
|
575
|
-
│ ├── doctor.ts / .test.ts
|
|
576
|
-
│ ├── asciicast.ts / .test.ts
|
|
577
|
-
│ ├── housekeeping.ts / .test.ts
|
|
578
|
-
│ └── tool-pool.ts / .test.ts
|
|
579
|
-
├── ui/
|
|
580
|
-
│ ├── theme.ts / .test.ts
|
|
581
|
-
│ └── keybindings/
|
|
582
|
-
│ ├── parser.ts / .test.ts
|
|
583
|
-
│ ├── resolver.ts / .test.ts
|
|
584
|
-
│ └── schema.ts / .test.ts
|
|
585
|
-
├── tools/builtins/
|
|
586
|
-
│ ├── worktree-tool.ts / .test.ts
|
|
587
|
-
│ ├── todo-write-tool.ts / .test.ts
|
|
588
|
-
│ ├── web-fetch-tool.ts / .test.ts
|
|
589
|
-
│ └── web-search-tool.ts / .test.ts
|
|
590
|
-
└── utils/
|
|
591
|
-
├── ansi-render.ts / .test.ts
|
|
592
|
-
└── bash-parser.ts / .test.ts
|
|
593
|
-
```
|
|
354
|
+
1. Создать `src/tools/builtins/your-tool.ts`
|
|
355
|
+
2. Реализовать интерфейс `Tool` из `src/tools/types.ts`
|
|
356
|
+
3. Зарегистрировать в `src/tools/builtins/index.ts`
|
|
357
|
+
4. Написать тесты
|
|
594
358
|
|
|
595
|
-
###
|
|
359
|
+
### Добавить провайдера
|
|
596
360
|
|
|
597
|
-
1.
|
|
598
|
-
2.
|
|
599
|
-
3.
|
|
600
|
-
4. Добавьте тесты `your-tool.test.ts`
|
|
361
|
+
1. Создать адаптер в `src/connect/your-adapter.ts`
|
|
362
|
+
2. Реализовать `ProviderAdapter`
|
|
363
|
+
3. Зарегистрировать в `src/connect/registry.ts`
|
|
601
364
|
|
|
602
|
-
|
|
365
|
+
---
|
|
603
366
|
|
|
604
|
-
|
|
605
|
-
2. Реализуйте интерфейс `ProviderAdapter` из `src/connect/types.ts`
|
|
606
|
-
3. Зарегистрируйте в `src/connect/registry.ts`
|
|
367
|
+
## Технологии
|
|
607
368
|
|
|
608
|
-
|
|
369
|
+
**Стек:** Node.js LTS, TypeScript (strict), ESM
|
|
609
370
|
|
|
610
|
-
|
|
371
|
+
**Зависимости:** Commander.js, Zod, Chalk, Ink/React, Ora, ssh2
|
|
611
372
|
|
|
612
|
-
|
|
373
|
+
**Сборка и тесты:** tsup (esbuild), Vitest, TypeScript
|
|
613
374
|
|
|
614
|
-
|
|
615
|
-
|------------|------------|
|
|
616
|
-
| **Node.js** LTS | Среда выполнения |
|
|
617
|
-
| **TypeScript** (strict) | Типобезопасность |
|
|
618
|
-
| **ESM** | Модульная система |
|
|
375
|
+
---
|
|
619
376
|
|
|
620
|
-
|
|
377
|
+
## Changelog
|
|
621
378
|
|
|
622
|
-
|
|
623
|
-
|------------|------------|
|
|
624
|
-
| [Commander.js](https://github.com/tj/commander.js) | Парсинг CLI аргументов |
|
|
625
|
-
| [Zod](https://zod.dev) | Валидация схем данных |
|
|
626
|
-
| [Chalk](https://github.com/chalk/chalk) | Цветной вывод в терминал |
|
|
627
|
-
| [Ink](https://github.com/vadimdemedes/ink) / [React](https://react.dev) | Terminal UI |
|
|
628
|
-
| [Ora](https://github.com/sindresorhus/ora) | Спиннеры загрузки |
|
|
629
|
-
| [ssh2](https://github.com/mscdex/ssh2) | SSH подключения |
|
|
379
|
+
### v1.1.4
|
|
630
380
|
|
|
631
|
-
|
|
381
|
+
- MCP config compatibility — поддержка объектного формата `mcpServers` (Claude/Cursor совместимый), автоматическая конвертация в массив через `z.preprocess`
|
|
632
382
|
|
|
633
|
-
|
|
634
|
-
|------------|------------|
|
|
635
|
-
| [tsup](https://tsup.egoist.dev) | Сборка (esbuild-based) |
|
|
636
|
-
| [Vitest](https://vitest.dev) | Тестирование |
|
|
637
|
-
| [TypeScript](https://www.typescriptlang.org) | Компилятор и проверка типов |
|
|
383
|
+
### v1.1.2
|
|
638
384
|
|
|
639
|
-
|
|
385
|
+
- Anthropic Claude integration — Messages API с streaming, tool use, кастомный Base URL
|
|
386
|
+
- MCP deep audit — 20+ багов исправлено, connection state machine, graceful shutdown, JSON Schema → Zod конвертация
|
|
387
|
+
- DRY: общий SSE парсер и network error handling для всех адаптеров
|
|
388
|
+
- Agent UI freeze fix — 3 критических бага с tool.promise, heartbeat timeout, progress events
|
|
389
|
+
- Animated progress display — braille-спиннер, реалтайм прогресс от агентов и инструментов
|
|
640
390
|
|
|
641
|
-
|
|
391
|
+
### v1.1.0
|
|
642
392
|
|
|
643
|
-
|
|
393
|
+
- AbortController hierarchy с WeakRef и auto-cleanup
|
|
394
|
+
- Progress events — per-tool progress в single/multi tool calls
|
|
395
|
+
- Dynamic concurrency safety — per-input проверка
|
|
396
|
+
- Batch partitioning — concurrent/exclusive batch'и
|
|
397
|
+
- Multi-level context compaction с circuit breaker
|
|
398
|
+
- Error recovery — synthetic results при abort
|
|
399
|
+
- Agent context — AsyncLocalStorage tracking
|
|
400
|
+
- Task system — фоновые задачи с EventEmitter
|
|
401
|
+
- Model fallback chain
|
|
402
|
+
- Session recovery — JSONL + `/resume` + `/sessions`
|
|
403
|
+
- Tool aliases & search
|
|
404
|
+
- Permission system — dynamic checking, auto-approve, caching
|
|
405
|
+
- Memory system — project-level `.cliskill.md` scanning
|
|
406
|
+
- Cost tracking — cache tokens, per-model pricing, budget warnings
|
|
644
407
|
|
|
645
408
|
---
|
|
646
409
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
**cliskill** — свободный AI-ассистент для тех, кто ценит независимость.
|
|
410
|
+
## Лицензия
|
|
650
411
|
|
|
651
|
-
|
|
412
|
+
[MIT](LICENSE)
|