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 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 login --key <key> # from https://bluehawks.ai/kavach/key
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
- Kavach needs a key to run. Get one at <https://bluehawks.ai/kavach/key>, then
20
- either paste it into the screen Kavach shows on first launch or pass it to
21
- `kavach login`. Kavach Basic is $4/month and Advanced is $8/month.
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; the daemon still needs a valid key to start.
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
- - **paid** — always the strongest model you have connected.
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 **7 days**, and the clock lives on Kavach's servers keyed to your
126
- installation — reinstalling or deleting `~/.kavach` does not restart it.
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, Kavach becomes **read-only**:
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 lapsed subscription stops Kavach from
135
- starting, but nothing under `~/.kavach` is touched, altered or uploaded — your
136
- chats, documents and run history stay exactly where they are and become
137
- available again the moment the key is renewed.
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.2.0. Up to 0.1.x an install with no key ran the
140
- local model indefinitely; from 0.2.0 a key is required to start. Installs
141
- already on 0.1.x are not affected until they upgrade.
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.2.0",
4
- "description": "Kavach \u2014 your agents, your data, your machine. Runs a local AI model and studio on your own hardware.",
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-darwin-arm64": "0.2.0",
33
- "@kavach-ai/cli-darwin-x64": "0.2.0",
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
  }
@@ -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
  };