kavach-ai 0.2.0 → 0.3.0
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 +68 -22
- package/package.json +4 -6
- package/scripts/platform.js +5 -4
package/README.md
CHANGED
|
@@ -4,9 +4,8 @@ Your agents, your data, your machine.
|
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm install -g kavach-ai
|
|
7
|
-
kavach install model # local model, ~1.5GB
|
|
8
|
-
kavach
|
|
9
|
-
kavach open # studio at http://localhost:5181
|
|
7
|
+
kavach install model # local model, ~1.5GB — this is the whole product
|
|
8
|
+
kavach open # studio at http://localhost:15181
|
|
10
9
|
```
|
|
11
10
|
|
|
12
11
|
The package is `kavach-ai`; the command it installs is `kavach`. (`kavach` on
|
|
@@ -16,13 +15,45 @@ The binary ships inside a small per-platform package that npm selects
|
|
|
16
15
|
automatically, so there is no download step and nothing to fetch outside the
|
|
17
16
|
registry — it installs cleanly behind a corporate proxy.
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
A key is optional. Without one you are on the free tier, which is the local
|
|
19
|
+
model, the local knowledge base and local dictation — no account, no network,
|
|
20
|
+
nothing leaving the machine. A key adds cloud model providers and unlocks your
|
|
21
|
+
plan's sections of the studio (Advanced adds evaluation, observability and
|
|
22
|
+
governance; teams are the Enterprise plan); get one at <https://bluehawks.ai/kavach/key> and
|
|
23
|
+
enter it with `kavach login`, or from the studio itself: the header shows a
|
|
24
|
+
tier chip (Free / Basic / Advanced) and clicking it opens the key entry, which
|
|
25
|
+
is also where the upgrade prompt links when something paid-only is refused.
|
|
26
|
+
Kavach Basic is $4.99/month and Advanced is $9.99/month. Your first key starts a 14-day trial of everything, Basic and Advanced.
|
|
22
27
|
|
|
23
28
|
The key is checked against Kavach when the daemon starts and periodically after
|
|
24
29
|
that. Between those checks everything runs locally on your own machine — the
|
|
25
|
-
model included — so ordinary offline work is unaffected
|
|
30
|
+
model included — so ordinary offline work is unaffected, and an install that
|
|
31
|
+
cannot reach Kavach falls back to the free tier rather than stopping.
|
|
32
|
+
|
|
33
|
+
## Free vs paid
|
|
34
|
+
|
|
35
|
+
| | Free (no key) | Basic $4.99/mo | Advanced $9.99/mo |
|
|
36
|
+
|---|---|---|---|
|
|
37
|
+
| Local model chat | yes | yes | yes |
|
|
38
|
+
| Knowledge base — local embeddings and search | yes | yes | yes |
|
|
39
|
+
| Voice, transcribed on your machine | yes | yes | yes |
|
|
40
|
+
| Chat with a cloud provider you connected (OpenAI, Anthropic, …) | no | yes | yes |
|
|
41
|
+
| `auto` / `paid` routing to a cloud model | no | yes | yes |
|
|
42
|
+
| Org mode and control-plane sync | no | yes | yes |
|
|
43
|
+
| Shared knowledge across a team | no | no | yes |
|
|
44
|
+
|
|
45
|
+
The boundary is enforced by the daemon, not by the UI: a Free install routes
|
|
46
|
+
every turn to the model on your machine, and a request that names a cloud
|
|
47
|
+
provider — or asks for the `paid` tier, which means the same thing — is
|
|
48
|
+
refused with HTTP 402 and a `kavach_plan_required` code. The studio reads that
|
|
49
|
+
code in its one central error parser, so the refusal is answered with a themed
|
|
50
|
+
upgrade prompt carrying the daemon's own sentence and a link to buy a key,
|
|
51
|
+
rather than by whatever generic error the page happened to have. The tier chip
|
|
52
|
+
in the header reads the same daemon's answer. Nothing about the free tier needs
|
|
53
|
+
a network connection to work.
|
|
54
|
+
|
|
55
|
+
`KAVACH_ENFORCE_KEY=0` turns the enforcement off. That is for local
|
|
56
|
+
development against a stubbed control plane, not for use.
|
|
26
57
|
|
|
27
58
|
## What runs where
|
|
28
59
|
|
|
@@ -51,10 +82,13 @@ so a stolen token grants access to nothing.
|
|
|
51
82
|
The composer's toggle picks how a turn is served:
|
|
52
83
|
|
|
53
84
|
- **local** — the bundled local model. No per-token cost and no network call
|
|
54
|
-
at inference time
|
|
85
|
+
at inference time. This is what every tier of the free plan can reach.
|
|
55
86
|
- **auto** — scores the task, then routes to the cheapest connected model that
|
|
56
|
-
can handle it. The default.
|
|
57
|
-
|
|
87
|
+
can handle it. The default. On the free tier it can only reach the local
|
|
88
|
+
model.
|
|
89
|
+
- **paid** — always the strongest model you have connected. Paid plan only:
|
|
90
|
+
without a key this is a request for a cloud model, and the daemon answers
|
|
91
|
+
402.
|
|
58
92
|
|
|
59
93
|
`auto` explains itself: hover the model chip to see which model answered and
|
|
60
94
|
why.
|
|
@@ -71,10 +105,16 @@ kavach install engine the inference engine only, without a model
|
|
|
71
105
|
kavach model list show the models this machine can run
|
|
72
106
|
kavach model use <id> switch local models
|
|
73
107
|
kavach doctor check the install and report anything wrong
|
|
74
|
-
kavach status show entitlement and configuration
|
|
75
|
-
kavach login link this install to a Kavach account
|
|
108
|
+
kavach status show entitlement, tier and configuration
|
|
109
|
+
kavach login link this install to a Kavach account (optional)
|
|
76
110
|
```
|
|
77
111
|
|
|
112
|
+
`kavach status` prints a `Tier` line: the tier the control plane issued
|
|
113
|
+
(`free`, `basic`, `advanced`). It is the same tier the studio's header chip
|
|
114
|
+
shows. Anything that is not currently entitled — no key, an expired trial, an
|
|
115
|
+
entitlement the daemon could not confirm — reports `free`, because that is
|
|
116
|
+
exactly what it gets.
|
|
117
|
+
|
|
78
118
|
## Local models
|
|
79
119
|
|
|
80
120
|
`kavach install model` probes the machine and picks:
|
|
@@ -122,23 +162,28 @@ pay nothing for it.
|
|
|
122
162
|
|
|
123
163
|
## Trial and billing
|
|
124
164
|
|
|
125
|
-
The trial is **
|
|
126
|
-
|
|
165
|
+
The trial is **14 days** and unlocks everything, Basic and Advanced. It starts when you mint your first key — that is
|
|
166
|
+
the moment you have decided you want something a key is needed for, so the
|
|
167
|
+
clock starts there rather than when you created an account. The clock lives on
|
|
168
|
+
Kavach's servers keyed to your installation: reinstalling or deleting
|
|
169
|
+
`~/.kavach` does not restart it.
|
|
127
170
|
|
|
128
|
-
When a trial or subscription lapses,
|
|
171
|
+
When a trial or subscription lapses, an **org deployment** becomes
|
|
172
|
+
**read-only**:
|
|
129
173
|
|
|
130
174
|
- everything you created is still there and still readable
|
|
131
175
|
- writes are refused, and scheduled agents stop running
|
|
132
176
|
- nothing is deleted, and billing keeps working so you can resume
|
|
133
177
|
|
|
134
|
-
**Your data is never held hostage.** A
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
178
|
+
**Your data is never held hostage.** A laptop install is never locked: it falls
|
|
179
|
+
back to the free tier, which keeps the local model, the knowledge base and
|
|
180
|
+
dictation working, and org-mode writes are refused until billing is settled.
|
|
181
|
+
Nothing under `~/.kavach` is touched, altered or uploaded — your chats,
|
|
182
|
+
documents and run history stay exactly where they are.
|
|
138
183
|
|
|
139
|
-
Note that this changed in 0.
|
|
140
|
-
|
|
141
|
-
|
|
184
|
+
Note that this changed in 0.3.0. Up to 0.2.x an install with no key ran
|
|
185
|
+
nothing: every route answered 402 until a key was entered. From 0.3.0 no key
|
|
186
|
+
means the free tier, enforced at the daemon.
|
|
142
187
|
|
|
143
188
|
## Automations
|
|
144
189
|
|
|
@@ -162,6 +207,7 @@ bases, shared agents, and cron that actually fires.
|
|
|
162
207
|
| `KAVACH_WHISPER_RELEASE_BASE` | Mirror for whisper.cpp engine downloads |
|
|
163
208
|
| `KAVACH_BINARY` | Run a specific binary, e.g. one you built yourself |
|
|
164
209
|
| `KAVACH_LOG` | Log filter, e.g. `kavach_client=debug` |
|
|
210
|
+
| `KAVACH_ENFORCE_KEY` | `0` disables the free-tier boundary (development only) |
|
|
165
211
|
|
|
166
212
|
## Uninstalling
|
|
167
213
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kavach-ai",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Kavach
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Kavach — your agents, your data, your machine. Runs a local AI model and studio on your own hardware.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
7
7
|
"agents",
|
|
@@ -29,9 +29,7 @@
|
|
|
29
29
|
"node": ">=18"
|
|
30
30
|
},
|
|
31
31
|
"optionalDependencies": {
|
|
32
|
-
"@kavach-ai/cli-
|
|
33
|
-
"@kavach-ai/cli-
|
|
34
|
-
"@kavach-ai/cli-linux-x64": "0.2.0",
|
|
35
|
-
"@kavach-ai/cli-linux-arm64": "0.2.0"
|
|
32
|
+
"@kavach-ai/cli-linux-x64": "0.3.0",
|
|
33
|
+
"@kavach-ai/cli-linux-arm64": "0.3.0"
|
|
36
34
|
}
|
|
37
35
|
}
|
package/scripts/platform.js
CHANGED
|
@@ -33,17 +33,18 @@ const fs = require('fs');
|
|
|
33
33
|
* Kept as a literal map rather than built by string concatenation so that
|
|
34
34
|
* `require.resolve` sees a static name and bundlers do not have to guess.
|
|
35
35
|
*/
|
|
36
|
+
// macOS is out of 0.3.0 (owner decision 2026-10-22): its binaries need a Mac
|
|
37
|
+
// to build and none was available. Restore these two lines (and the TARGETS
|
|
38
|
+
// and optionalDependencies entries) when a Mac build is part of the release.
|
|
39
|
+
// 'darwin-arm64': '@kavach-ai/cli-darwin-arm64',
|
|
40
|
+
// 'darwin-x64': '@kavach-ai/cli-darwin-x64',
|
|
36
41
|
const PACKAGES = {
|
|
37
|
-
'darwin-arm64': '@kavach-ai/cli-darwin-arm64',
|
|
38
|
-
'darwin-x64': '@kavach-ai/cli-darwin-x64',
|
|
39
42
|
'linux-x64': '@kavach-ai/cli-linux-x64',
|
|
40
43
|
'linux-arm64': '@kavach-ai/cli-linux-arm64',
|
|
41
44
|
};
|
|
42
45
|
|
|
43
46
|
/** Rust target triples, used by the release build and the generator. */
|
|
44
47
|
const TARGETS = {
|
|
45
|
-
'darwin-arm64': 'aarch64-apple-darwin',
|
|
46
|
-
'darwin-x64': 'x86_64-apple-darwin',
|
|
47
48
|
'linux-x64': 'x86_64-unknown-linux-gnu',
|
|
48
49
|
'linux-arm64': 'aarch64-unknown-linux-gnu',
|
|
49
50
|
};
|