bikky 0.3.13 → 0.4.1
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/CHANGELOG.md +20 -0
- package/CODE_OF_CONDUCT.md +80 -0
- package/CONTRIBUTING.md +206 -0
- package/README.md +94 -20
- package/SECURITY.md +58 -0
- package/SUPPORT.md +22 -0
- package/dist/config.d.ts +68 -1
- package/dist/config.js +197 -4
- package/dist/daemon/extraction.d.ts +12 -2
- package/dist/daemon/extraction.js +85 -133
- package/dist/daemon/loop.js +15 -1
- package/dist/daemon/qdrant.js +0 -1
- package/dist/daemon/transcript-sources.d.ts +26 -0
- package/dist/daemon/transcript-sources.js +193 -0
- package/dist/daemon/watcher.d.ts +3 -2
- package/dist/daemon/watcher.js +51 -2
- package/dist/install.d.ts +9 -1
- package/dist/install.js +62 -34
- package/dist/lib/qdrant-pool.d.ts +57 -0
- package/dist/lib/qdrant-pool.js +104 -0
- package/dist/mcp/api.d.ts +57 -19
- package/dist/mcp/api.js +134 -72
- package/dist/mcp/helpers.d.ts +0 -1
- package/dist/mcp/helpers.js +2 -15
- package/dist/mcp/index.js +29 -14
- package/dist/mcp/tools.d.ts +0 -7
- package/dist/mcp/tools.js +618 -276
- package/dist/mcp/types.d.ts +0 -3
- package/dist/routing.d.ts +53 -0
- package/dist/routing.js +129 -0
- package/dist/search-scope.d.ts +24 -0
- package/dist/search-scope.js +174 -0
- package/docs/config/fully-hosted.md +57 -0
- package/docs/config/hosted-models.md +50 -0
- package/docs/config/hosted-qdrant-local-models.md +39 -0
- package/docs/config/local.md +34 -0
- package/docs/configuration.md +403 -0
- package/docs/privacy-first.md +140 -0
- package/docs/screenshots/dashboard.png +0 -0
- package/docs/screenshots/graph.png +0 -0
- package/docs/screenshots/memory.png +0 -0
- package/package.json +28 -7
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/config.test.d.ts +0 -9
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -576
- package/dist/config.test.js.map +0 -1
- package/dist/daemon/capture-policy.d.ts.map +0 -1
- package/dist/daemon/capture-policy.js.map +0 -1
- package/dist/daemon/capture-policy.test.d.ts +0 -2
- package/dist/daemon/capture-policy.test.d.ts.map +0 -1
- package/dist/daemon/capture-policy.test.js +0 -48
- package/dist/daemon/capture-policy.test.js.map +0 -1
- package/dist/daemon/consolidation.d.ts.map +0 -1
- package/dist/daemon/consolidation.js.map +0 -1
- package/dist/daemon/entity-typing.d.ts.map +0 -1
- package/dist/daemon/entity-typing.js.map +0 -1
- package/dist/daemon/entity-typing.test.d.ts +0 -2
- package/dist/daemon/entity-typing.test.d.ts.map +0 -1
- package/dist/daemon/entity-typing.test.js +0 -50
- package/dist/daemon/entity-typing.test.js.map +0 -1
- package/dist/daemon/episode-summary.d.ts.map +0 -1
- package/dist/daemon/episode-summary.js.map +0 -1
- package/dist/daemon/episode-summary.test.d.ts +0 -2
- package/dist/daemon/episode-summary.test.d.ts.map +0 -1
- package/dist/daemon/episode-summary.test.js +0 -104
- package/dist/daemon/episode-summary.test.js.map +0 -1
- package/dist/daemon/extraction-quality.test.d.ts +0 -2
- package/dist/daemon/extraction-quality.test.d.ts.map +0 -1
- package/dist/daemon/extraction-quality.test.js +0 -283
- package/dist/daemon/extraction-quality.test.js.map +0 -1
- package/dist/daemon/extraction-rules.d.ts.map +0 -1
- package/dist/daemon/extraction-rules.js.map +0 -1
- package/dist/daemon/extraction-rules.test.d.ts +0 -2
- package/dist/daemon/extraction-rules.test.d.ts.map +0 -1
- package/dist/daemon/extraction-rules.test.js +0 -203
- package/dist/daemon/extraction-rules.test.js.map +0 -1
- package/dist/daemon/extraction.d.ts.map +0 -1
- package/dist/daemon/extraction.js.map +0 -1
- package/dist/daemon/extraction.test.d.ts +0 -2
- package/dist/daemon/extraction.test.d.ts.map +0 -1
- package/dist/daemon/extraction.test.js +0 -225
- package/dist/daemon/extraction.test.js.map +0 -1
- package/dist/daemon/index.d.ts.map +0 -1
- package/dist/daemon/index.js.map +0 -1
- package/dist/daemon/loop.d.ts.map +0 -1
- package/dist/daemon/loop.js.map +0 -1
- package/dist/daemon/loop.test.d.ts +0 -2
- package/dist/daemon/loop.test.d.ts.map +0 -1
- package/dist/daemon/loop.test.js +0 -85
- package/dist/daemon/loop.test.js.map +0 -1
- package/dist/daemon/maintenance-state.d.ts.map +0 -1
- package/dist/daemon/maintenance-state.js.map +0 -1
- package/dist/daemon/maintenance-state.test.d.ts +0 -2
- package/dist/daemon/maintenance-state.test.d.ts.map +0 -1
- package/dist/daemon/maintenance-state.test.js +0 -56
- package/dist/daemon/maintenance-state.test.js.map +0 -1
- package/dist/daemon/qdrant.d.ts.map +0 -1
- package/dist/daemon/qdrant.js.map +0 -1
- package/dist/daemon/qdrant.test.d.ts +0 -8
- package/dist/daemon/qdrant.test.d.ts.map +0 -1
- package/dist/daemon/qdrant.test.js +0 -265
- package/dist/daemon/qdrant.test.js.map +0 -1
- package/dist/daemon/relations-vocab.d.ts.map +0 -1
- package/dist/daemon/relations-vocab.js.map +0 -1
- package/dist/daemon/relations-vocab.test.d.ts +0 -2
- package/dist/daemon/relations-vocab.test.d.ts.map +0 -1
- package/dist/daemon/relations-vocab.test.js +0 -69
- package/dist/daemon/relations-vocab.test.js.map +0 -1
- package/dist/daemon/relations.d.ts.map +0 -1
- package/dist/daemon/relations.js.map +0 -1
- package/dist/daemon/relations.test.d.ts +0 -2
- package/dist/daemon/relations.test.d.ts.map +0 -1
- package/dist/daemon/relations.test.js +0 -36
- package/dist/daemon/relations.test.js.map +0 -1
- package/dist/daemon/session-index.d.ts.map +0 -1
- package/dist/daemon/session-index.js.map +0 -1
- package/dist/daemon/session-index.test.d.ts +0 -2
- package/dist/daemon/session-index.test.d.ts.map +0 -1
- package/dist/daemon/session-index.test.js +0 -60
- package/dist/daemon/session-index.test.js.map +0 -1
- package/dist/daemon/session-summary.d.ts.map +0 -1
- package/dist/daemon/session-summary.js.map +0 -1
- package/dist/daemon/session-summary.test.d.ts +0 -2
- package/dist/daemon/session-summary.test.d.ts.map +0 -1
- package/dist/daemon/session-summary.test.js +0 -162
- package/dist/daemon/session-summary.test.js.map +0 -1
- package/dist/daemon/staleness.d.ts.map +0 -1
- package/dist/daemon/staleness.js.map +0 -1
- package/dist/daemon/staleness.test.d.ts +0 -7
- package/dist/daemon/staleness.test.d.ts.map +0 -1
- package/dist/daemon/staleness.test.js +0 -128
- package/dist/daemon/staleness.test.js.map +0 -1
- package/dist/daemon/watcher-health.d.ts.map +0 -1
- package/dist/daemon/watcher-health.js.map +0 -1
- package/dist/daemon/watcher-health.test.d.ts +0 -5
- package/dist/daemon/watcher-health.test.d.ts.map +0 -1
- package/dist/daemon/watcher-health.test.js +0 -119
- package/dist/daemon/watcher-health.test.js.map +0 -1
- package/dist/daemon/watcher.d.ts.map +0 -1
- package/dist/daemon/watcher.js.map +0 -1
- package/dist/daemon/watcher.test.d.ts +0 -9
- package/dist/daemon/watcher.test.d.ts.map +0 -1
- package/dist/daemon/watcher.test.js +0 -204
- package/dist/daemon/watcher.test.js.map +0 -1
- package/dist/daemon/workstream-resolver.d.ts.map +0 -1
- package/dist/daemon/workstream-resolver.js.map +0 -1
- package/dist/daemon/workstream-resolver.test.d.ts +0 -2
- package/dist/daemon/workstream-resolver.test.d.ts.map +0 -1
- package/dist/daemon/workstream-resolver.test.js +0 -128
- package/dist/daemon/workstream-resolver.test.js.map +0 -1
- package/dist/daemon/workstream-summary.d.ts.map +0 -1
- package/dist/daemon/workstream-summary.js.map +0 -1
- package/dist/daemon/workstream-summary.test.d.ts +0 -2
- package/dist/daemon/workstream-summary.test.d.ts.map +0 -1
- package/dist/daemon/workstream-summary.test.js +0 -89
- package/dist/daemon/workstream-summary.test.js.map +0 -1
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/install.test.d.ts +0 -9
- package/dist/install.test.d.ts.map +0 -1
- package/dist/install.test.js +0 -126
- package/dist/install.test.js.map +0 -1
- package/dist/lib/qdrant-client.d.ts.map +0 -1
- package/dist/lib/qdrant-client.js.map +0 -1
- package/dist/lib/qdrant-client.test.d.ts +0 -8
- package/dist/lib/qdrant-client.test.d.ts.map +0 -1
- package/dist/lib/qdrant-client.test.js +0 -274
- package/dist/lib/qdrant-client.test.js.map +0 -1
- package/dist/lifecycle.d.ts.map +0 -1
- package/dist/lifecycle.js.map +0 -1
- package/dist/lifecycle.test.d.ts +0 -8
- package/dist/lifecycle.test.d.ts.map +0 -1
- package/dist/lifecycle.test.js +0 -74
- package/dist/lifecycle.test.js.map +0 -1
- package/dist/llm/embedding/index.d.ts.map +0 -1
- package/dist/llm/embedding/index.js.map +0 -1
- package/dist/llm/embedding/index.test.d.ts +0 -8
- package/dist/llm/embedding/index.test.d.ts.map +0 -1
- package/dist/llm/embedding/index.test.js +0 -100
- package/dist/llm/embedding/index.test.js.map +0 -1
- package/dist/llm/embedding/providers/bedrock.d.ts.map +0 -1
- package/dist/llm/embedding/providers/bedrock.js.map +0 -1
- package/dist/llm/embedding/providers/bedrock.test.d.ts +0 -2
- package/dist/llm/embedding/providers/bedrock.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/bedrock.test.js +0 -24
- package/dist/llm/embedding/providers/bedrock.test.js.map +0 -1
- package/dist/llm/embedding/providers/index.d.ts.map +0 -1
- package/dist/llm/embedding/providers/index.js.map +0 -1
- package/dist/llm/embedding/providers/ollama.d.ts.map +0 -1
- package/dist/llm/embedding/providers/ollama.js.map +0 -1
- package/dist/llm/embedding/providers/ollama.test.d.ts +0 -2
- package/dist/llm/embedding/providers/ollama.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/ollama.test.js +0 -54
- package/dist/llm/embedding/providers/ollama.test.js.map +0 -1
- package/dist/llm/embedding/providers/openai.d.ts.map +0 -1
- package/dist/llm/embedding/providers/openai.js.map +0 -1
- package/dist/llm/embedding/providers/openai.test.d.ts +0 -2
- package/dist/llm/embedding/providers/openai.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/openai.test.js +0 -48
- package/dist/llm/embedding/providers/openai.test.js.map +0 -1
- package/dist/llm/embedding/providers/portkey.d.ts.map +0 -1
- package/dist/llm/embedding/providers/portkey.js.map +0 -1
- package/dist/llm/embedding/providers/portkey.test.d.ts +0 -2
- package/dist/llm/embedding/providers/portkey.test.d.ts.map +0 -1
- package/dist/llm/embedding/providers/portkey.test.js +0 -56
- package/dist/llm/embedding/providers/portkey.test.js.map +0 -1
- package/dist/llm/embedding/registry.d.ts.map +0 -1
- package/dist/llm/embedding/registry.js.map +0 -1
- package/dist/llm/embedding/registry.test.d.ts +0 -7
- package/dist/llm/embedding/registry.test.d.ts.map +0 -1
- package/dist/llm/embedding/registry.test.js +0 -68
- package/dist/llm/embedding/registry.test.js.map +0 -1
- package/dist/llm/embedding/types.d.ts.map +0 -1
- package/dist/llm/embedding/types.js.map +0 -1
- package/dist/llm/errors.d.ts.map +0 -1
- package/dist/llm/errors.js.map +0 -1
- package/dist/llm/errors.test.d.ts +0 -2
- package/dist/llm/errors.test.d.ts.map +0 -1
- package/dist/llm/errors.test.js +0 -103
- package/dist/llm/errors.test.js.map +0 -1
- package/dist/llm/fetch.d.ts.map +0 -1
- package/dist/llm/fetch.js.map +0 -1
- package/dist/llm/index.d.ts.map +0 -1
- package/dist/llm/index.js.map +0 -1
- package/dist/llm/inference/index.d.ts.map +0 -1
- package/dist/llm/inference/index.js.map +0 -1
- package/dist/llm/inference/index.test.d.ts +0 -6
- package/dist/llm/inference/index.test.d.ts.map +0 -1
- package/dist/llm/inference/index.test.js +0 -150
- package/dist/llm/inference/index.test.js.map +0 -1
- package/dist/llm/inference/providers/bedrock.d.ts.map +0 -1
- package/dist/llm/inference/providers/bedrock.js.map +0 -1
- package/dist/llm/inference/providers/bedrock.test.d.ts +0 -2
- package/dist/llm/inference/providers/bedrock.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/bedrock.test.js +0 -68
- package/dist/llm/inference/providers/bedrock.test.js.map +0 -1
- package/dist/llm/inference/providers/index.d.ts.map +0 -1
- package/dist/llm/inference/providers/index.js.map +0 -1
- package/dist/llm/inference/providers/ollama.d.ts.map +0 -1
- package/dist/llm/inference/providers/ollama.js.map +0 -1
- package/dist/llm/inference/providers/ollama.test.d.ts +0 -2
- package/dist/llm/inference/providers/ollama.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/ollama.test.js +0 -57
- package/dist/llm/inference/providers/ollama.test.js.map +0 -1
- package/dist/llm/inference/providers/openai.d.ts.map +0 -1
- package/dist/llm/inference/providers/openai.js.map +0 -1
- package/dist/llm/inference/providers/openai.test.d.ts +0 -2
- package/dist/llm/inference/providers/openai.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/openai.test.js +0 -82
- package/dist/llm/inference/providers/openai.test.js.map +0 -1
- package/dist/llm/inference/providers/portkey.d.ts.map +0 -1
- package/dist/llm/inference/providers/portkey.js.map +0 -1
- package/dist/llm/inference/providers/portkey.test.d.ts +0 -2
- package/dist/llm/inference/providers/portkey.test.d.ts.map +0 -1
- package/dist/llm/inference/providers/portkey.test.js +0 -48
- package/dist/llm/inference/providers/portkey.test.js.map +0 -1
- package/dist/llm/inference/registry.d.ts.map +0 -1
- package/dist/llm/inference/registry.js.map +0 -1
- package/dist/llm/inference/registry.test.d.ts +0 -6
- package/dist/llm/inference/registry.test.d.ts.map +0 -1
- package/dist/llm/inference/registry.test.js +0 -63
- package/dist/llm/inference/registry.test.js.map +0 -1
- package/dist/llm/inference/types.d.ts.map +0 -1
- package/dist/llm/inference/types.js.map +0 -1
- package/dist/llm/telemetry.d.ts.map +0 -1
- package/dist/llm/telemetry.js.map +0 -1
- package/dist/llm/telemetry.test.d.ts +0 -5
- package/dist/llm/telemetry.test.d.ts.map +0 -1
- package/dist/llm/telemetry.test.js +0 -89
- package/dist/llm/telemetry.test.js.map +0 -1
- package/dist/llm/types.d.ts.map +0 -1
- package/dist/llm/types.js.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js.map +0 -1
- package/dist/logger.test.d.ts +0 -5
- package/dist/logger.test.d.ts.map +0 -1
- package/dist/logger.test.js +0 -103
- package/dist/logger.test.js.map +0 -1
- package/dist/mcp/api.d.ts.map +0 -1
- package/dist/mcp/api.js.map +0 -1
- package/dist/mcp/api.test.d.ts +0 -6
- package/dist/mcp/api.test.d.ts.map +0 -1
- package/dist/mcp/api.test.js +0 -130
- package/dist/mcp/api.test.js.map +0 -1
- package/dist/mcp/helpers.d.ts.map +0 -1
- package/dist/mcp/helpers.js.map +0 -1
- package/dist/mcp/helpers.test.d.ts +0 -5
- package/dist/mcp/helpers.test.d.ts.map +0 -1
- package/dist/mcp/helpers.test.js +0 -548
- package/dist/mcp/helpers.test.js.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/taxonomy.d.ts.map +0 -1
- package/dist/mcp/taxonomy.js.map +0 -1
- package/dist/mcp/taxonomy.test.d.ts +0 -5
- package/dist/mcp/taxonomy.test.d.ts.map +0 -1
- package/dist/mcp/taxonomy.test.js +0 -215
- package/dist/mcp/taxonomy.test.js.map +0 -1
- package/dist/mcp/tools.d.ts.map +0 -1
- package/dist/mcp/tools.integration.itest.d.ts +0 -23
- package/dist/mcp/tools.integration.itest.d.ts.map +0 -1
- package/dist/mcp/tools.integration.itest.js +0 -171
- package/dist/mcp/tools.integration.itest.js.map +0 -1
- package/dist/mcp/tools.js.map +0 -1
- package/dist/mcp/tools.test.d.ts +0 -16
- package/dist/mcp/tools.test.d.ts.map +0 -1
- package/dist/mcp/tools.test.js +0 -908
- package/dist/mcp/tools.test.js.map +0 -1
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js.map +0 -1
- package/dist/postinstall.d.ts.map +0 -1
- package/dist/postinstall.js.map +0 -1
- package/dist/privacy/redaction.d.ts.map +0 -1
- package/dist/privacy/redaction.js.map +0 -1
- package/dist/privacy/redaction.test.d.ts +0 -2
- package/dist/privacy/redaction.test.d.ts.map +0 -1
- package/dist/privacy/redaction.test.js +0 -51
- package/dist/privacy/redaction.test.js.map +0 -1
- package/dist/prompts/brief.d.ts.map +0 -1
- package/dist/prompts/brief.js.map +0 -1
- package/dist/prompts/contradiction.d.ts.map +0 -1
- package/dist/prompts/contradiction.js.map +0 -1
- package/dist/prompts/distill.d.ts.map +0 -1
- package/dist/prompts/distill.js.map +0 -1
- package/dist/prompts/entity-typing.d.ts.map +0 -1
- package/dist/prompts/entity-typing.js.map +0 -1
- package/dist/prompts/episode-summary.d.ts.map +0 -1
- package/dist/prompts/episode-summary.js.map +0 -1
- package/dist/prompts/extraction.d.ts.map +0 -1
- package/dist/prompts/extraction.js.map +0 -1
- package/dist/prompts/index.d.ts.map +0 -1
- package/dist/prompts/index.js.map +0 -1
- package/dist/prompts/prompts.test.d.ts +0 -8
- package/dist/prompts/prompts.test.d.ts.map +0 -1
- package/dist/prompts/prompts.test.js +0 -140
- package/dist/prompts/prompts.test.js.map +0 -1
- package/dist/prompts/relations.d.ts.map +0 -1
- package/dist/prompts/relations.js.map +0 -1
- package/dist/prompts/workstream-summary.d.ts.map +0 -1
- package/dist/prompts/workstream-summary.js.map +0 -1
- package/dist/provenance/actor.d.ts.map +0 -1
- package/dist/provenance/actor.js.map +0 -1
- package/dist/provenance/actor.test.d.ts +0 -2
- package/dist/provenance/actor.test.d.ts.map +0 -1
- package/dist/provenance/actor.test.js +0 -49
- package/dist/provenance/actor.test.js.map +0 -1
- package/dist/render.d.ts.map +0 -1
- package/dist/render.js.map +0 -1
- package/dist/render.test.d.ts +0 -8
- package/dist/render.test.d.ts.map +0 -1
- package/dist/render.test.js +0 -244
- package/dist/render.test.js.map +0 -1
- package/dist/status.d.ts.map +0 -1
- package/dist/status.js.map +0 -1
- package/dist/status.test.d.ts +0 -5
- package/dist/status.test.d.ts.map +0 -1
- package/dist/status.test.js +0 -203
- package/dist/status.test.js.map +0 -1
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
bikky is designed to keep setup small. The example below keeps Qdrant local and uses hosted models; the focused guides list the other common setup shapes.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
mkdir -p ~/.bikky
|
|
7
|
+
cat > ~/.bikky/config.json <<'JSON'
|
|
8
|
+
{
|
|
9
|
+
"qdrant_url": "http://localhost:6333",
|
|
10
|
+
"qdrant_api_key": "",
|
|
11
|
+
"embedding": {
|
|
12
|
+
"provider": "openai",
|
|
13
|
+
"model": "text-embedding-3-small",
|
|
14
|
+
"dimensions": 1536,
|
|
15
|
+
"api_key": "sk-..."
|
|
16
|
+
},
|
|
17
|
+
"llm": {
|
|
18
|
+
"provider": "openai",
|
|
19
|
+
"model": "gpt-4.1-mini",
|
|
20
|
+
"api_key": "sk-..."
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
JSON
|
|
24
|
+
bikky status
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Config lives at `~/.bikky/config.json`, or at `BIKKY_HOME/config.json` when `BIKKY_HOME` is set. Environment variables override the config file.
|
|
28
|
+
|
|
29
|
+
## Common setups
|
|
30
|
+
|
|
31
|
+
If you know which path you want, start with the focused guide:
|
|
32
|
+
|
|
33
|
+
| Setup | Best for | Guide |
|
|
34
|
+
| ----------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------ |
|
|
35
|
+
| Fully hosted | Best performance and teams; managed vector storage and models | [Fully hosted config](config/fully-hosted.md) |
|
|
36
|
+
| Local Qdrant + hosted models | Local vector storage with hosted extraction and embedding | [Hosted models config](config/hosted-models.md) |
|
|
37
|
+
| Local and free | Local evaluation; quality depends on local models | [Local config guide](config/local.md) |
|
|
38
|
+
| Hosted Qdrant + local models | Shared vector storage while keeping model calls local | [Hosted Qdrant + local models](config/hosted-qdrant-local-models.md) |
|
|
39
|
+
|
|
40
|
+
Privacy-conscious users should also read the [privacy-first quickstart](privacy-first.md), which combines local Qdrant, local Ollama models, and transcript-capture disable controls.
|
|
41
|
+
|
|
42
|
+
### Fully hosted
|
|
43
|
+
|
|
44
|
+
Best for performance and teams. Qdrant Cloud stores vectors, and hosted embeddings + LLM calls handle extraction, curation, and recall.
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"qdrant_url": "https://your-cluster.cloud.qdrant.io:6333",
|
|
49
|
+
"qdrant_api_key": "your-key",
|
|
50
|
+
"embedding": {
|
|
51
|
+
"provider": "openai",
|
|
52
|
+
"model": "text-embedding-3-small",
|
|
53
|
+
"dimensions": 1536,
|
|
54
|
+
"api_key": "sk-..."
|
|
55
|
+
},
|
|
56
|
+
"llm": {
|
|
57
|
+
"provider": "openai",
|
|
58
|
+
"model": "gpt-4.1-mini",
|
|
59
|
+
"api_key": "sk-..."
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`qdrant_api_key` is optional only for unauthenticated self-hosted Qdrant. Qdrant Cloud usually requires it.
|
|
65
|
+
|
|
66
|
+
### Local Qdrant + hosted models
|
|
67
|
+
|
|
68
|
+
Best for local vector storage with hosted extraction and embedding quality.
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"qdrant_url": "http://localhost:6333",
|
|
73
|
+
"qdrant_api_key": "",
|
|
74
|
+
"embedding": {
|
|
75
|
+
"provider": "openai",
|
|
76
|
+
"model": "text-embedding-3-small",
|
|
77
|
+
"dimensions": 1536,
|
|
78
|
+
"api_key": "sk-..."
|
|
79
|
+
},
|
|
80
|
+
"llm": {
|
|
81
|
+
"provider": "openai",
|
|
82
|
+
"model": "gpt-4.1-mini",
|
|
83
|
+
"api_key": "sk-..."
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`qdrant_api_key` is optional. Leave it empty or omit it for local or unauthenticated self-hosted Qdrant. Prefer env vars for hosted model auth? Omit `api_key` above and set `OPENAI_API_KEY` instead.
|
|
89
|
+
|
|
90
|
+
### Local and free
|
|
91
|
+
|
|
92
|
+
Use this for local, free, account-free evaluation. Qdrant runs locally and Ollama provides the default embedding + LLM models.
|
|
93
|
+
|
|
94
|
+
This setup is usually not the best long-term choice for teams. Extraction, embedding, and curation performance depends on the local models and hardware you run.
|
|
95
|
+
|
|
96
|
+
```json
|
|
97
|
+
{
|
|
98
|
+
"qdrant_url": "http://localhost:6333",
|
|
99
|
+
"qdrant_api_key": ""
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`qdrant_api_key` is optional. Leave it empty or omit it for local or unauthenticated self-hosted Qdrant.
|
|
104
|
+
|
|
105
|
+
### Hosted Qdrant, local models
|
|
106
|
+
|
|
107
|
+
Use this when you want the memory database shared across machines, but still want embeddings and LLM calls to stay local.
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"qdrant_url": "https://your-cluster.cloud.qdrant.io:6333",
|
|
112
|
+
"qdrant_api_key": "your-key"
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
`qdrant_api_key` is optional only for unauthenticated self-hosted Qdrant. Qdrant Cloud usually requires it.
|
|
117
|
+
|
|
118
|
+
After changing Qdrant or provider settings, restart long-running processes:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
bikky stop && bikky start
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Then restart your editor so its MCP server process reloads the config.
|
|
125
|
+
|
|
126
|
+
## Environment variables
|
|
127
|
+
|
|
128
|
+
Use env vars when you do not want to write credentials to the config file:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
export QDRANT_URL="http://localhost:6333"
|
|
132
|
+
export QDRANT_API_KEY="..." # only needed for Qdrant Cloud or authenticated self-hosted Qdrant
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Useful basics:
|
|
136
|
+
|
|
137
|
+
| Env var | Config field | Notes |
|
|
138
|
+
| ---------------- | ---------------- | --------------------------------------------------------------------------- |
|
|
139
|
+
| `QDRANT_URL` | `qdrant_url` | Required unless set in config |
|
|
140
|
+
| `QDRANT_API_KEY` | `qdrant_api_key` | Optional for local/unauthenticated Qdrant; usually needed for Qdrant Cloud |
|
|
141
|
+
| `BIKKY_HOME` | — | Moves the config/log/state directory from `~/.bikky` |
|
|
142
|
+
|
|
143
|
+
## Provider options
|
|
144
|
+
|
|
145
|
+
Use these exact values in `embedding.provider` and `llm.provider`. Both fields accept the same provider values, and you can choose them independently.
|
|
146
|
+
|
|
147
|
+
| Provider value | Works for embeddings | Works for LLM | Best for | Auth |
|
|
148
|
+
| -------------- | -------------------- | ------------- | ------------------------------------ | --------------------------------- |
|
|
149
|
+
| `ollama` | Yes | Yes | Local and free defaults | None |
|
|
150
|
+
| `openai` | Yes | Yes | Simple hosted models | `OPENAI_API_KEY` or `api_key` |
|
|
151
|
+
| `bedrock` | Yes | Yes | AWS-managed models | AWS credentials or IAM role |
|
|
152
|
+
| `portkey` | Yes | Yes | Gateway/routing over other providers | Portkey API key |
|
|
153
|
+
|
|
154
|
+
## Advanced configuration
|
|
155
|
+
|
|
156
|
+
These sections are optional references for custom providers, tuning, scoping, and daemon internals.
|
|
157
|
+
|
|
158
|
+
### Full setting reference
|
|
159
|
+
|
|
160
|
+
#### Qdrant
|
|
161
|
+
|
|
162
|
+
| Setting | Env var | Default | Notes |
|
|
163
|
+
| ---------------- | ------------------ | ------- | ------------------------------ |
|
|
164
|
+
| `qdrant_url` | `QDRANT_URL` | none | Qdrant REST URL |
|
|
165
|
+
| `qdrant_api_key` | `QDRANT_API_KEY` | none | API key for authenticated Qdrant |
|
|
166
|
+
| `collection` | `BIKKY_COLLECTION` | `bikky` | Collection name |
|
|
167
|
+
|
|
168
|
+
`qdrant_api_key` is optional for local or unauthenticated self-hosted Qdrant. Qdrant Cloud usually requires it.
|
|
169
|
+
|
|
170
|
+
#### Embeddings
|
|
171
|
+
|
|
172
|
+
| Setting | Env var | Default | Notes |
|
|
173
|
+
| ---------------------- | ---------------------- | ------------------------ | ----------------------------------------------- |
|
|
174
|
+
| `embedding.provider` | `EMBEDDING_PROVIDER` | `ollama` | One of `ollama`, `openai`, `bedrock`, `portkey` |
|
|
175
|
+
| `embedding.model` | `EMBEDDING_MODEL` | `qwen3-embedding:0.6b` | Embedding model name |
|
|
176
|
+
| `embedding.dimensions` | `EMBEDDING_DIMENSIONS` | `1024` | Must match the selected model output |
|
|
177
|
+
| `embedding.base_url` | `EMBEDDING_BASE_URL` | `http://localhost:11434` | Used by local or OpenAI-compatible providers |
|
|
178
|
+
| `embedding.api_key` | `OPENAI_API_KEY` | — | Provider API key; can also be set in config |
|
|
179
|
+
|
|
180
|
+
Common model dimensions:
|
|
181
|
+
|
|
182
|
+
| Provider | Model | Dimensions |
|
|
183
|
+
| --------- | -------------------------------- | ---------- |
|
|
184
|
+
| `ollama` | `qwen3-embedding:0.6b` | `1024` |
|
|
185
|
+
| `ollama` | `nomic-embed-text` | `768` |
|
|
186
|
+
| `openai` | `text-embedding-3-small` | `1536` |
|
|
187
|
+
| `openai` | `text-embedding-3-large` | `3072` |
|
|
188
|
+
| `bedrock` | `amazon.titan-embed-text-v2:0` | `1024` |
|
|
189
|
+
|
|
190
|
+
If you change the embedding model, make sure `embedding.dimensions` matches the model output.
|
|
191
|
+
|
|
192
|
+
#### LLM
|
|
193
|
+
|
|
194
|
+
The LLM is used by background maintenance features. Ollama is the default.
|
|
195
|
+
|
|
196
|
+
| Setting | Env var | Default | Notes |
|
|
197
|
+
| ------------------ | ------------------------------------ | ------------------------ | -------------------------------------------- |
|
|
198
|
+
| `llm.provider` | `LLM_PROVIDER` | `ollama` | One of `ollama`, `openai`, `bedrock`, `portkey` |
|
|
199
|
+
| `llm.model` | `LLM_MODEL` | `qwen2.5:7b` | LLM model name |
|
|
200
|
+
| `llm.base_url` | `LLM_BASE_URL` | `http://localhost:11434` | Used by local or OpenAI-compatible providers |
|
|
201
|
+
| `llm.api_key` | `OPENAI_API_KEY` | — | Provider API key; can also be set in config |
|
|
202
|
+
| `llm.extra.region` | `AWS_BEDROCK_REGION` / `AWS_REGION` | `us-east-1` | AWS Bedrock region |
|
|
203
|
+
|
|
204
|
+
#### Timeouts and retries
|
|
205
|
+
|
|
206
|
+
| Setting | Env var | Default |
|
|
207
|
+
| ------------------------------- | ---------------------------------------- | ------- |
|
|
208
|
+
| `embedding.timeout_ms` | `BIKKY_EMBEDDING_TIMEOUT_MS` | `30000` |
|
|
209
|
+
| `embedding.retries` | `BIKKY_EMBEDDING_RETRIES` | `2` |
|
|
210
|
+
| `embedding.retry_base_delay_ms` | `BIKKY_EMBEDDING_RETRY_BASE_DELAY_MS` | `250` |
|
|
211
|
+
| `llm.timeout_ms` | `BIKKY_LLM_TIMEOUT_MS` | `30000` |
|
|
212
|
+
| `llm.retries` | `BIKKY_LLM_RETRIES` | `2` |
|
|
213
|
+
| `llm.retry_base_delay_ms` | `BIKKY_LLM_RETRY_BASE_DELAY_MS` | `250` |
|
|
214
|
+
|
|
215
|
+
Retries use jittered exponential backoff for transient errors, rate limits, and timeouts. Authentication and bad-request errors fail fast.
|
|
216
|
+
|
|
217
|
+
### Portkey and Bedrock examples
|
|
218
|
+
|
|
219
|
+
#### Portkey gateway
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"qdrant_url": "https://your-cluster.cloud.qdrant.io:6333",
|
|
224
|
+
"qdrant_api_key": "your-key",
|
|
225
|
+
"embedding": {
|
|
226
|
+
"provider": "portkey",
|
|
227
|
+
"model": "@openai/text-embedding-3-small",
|
|
228
|
+
"dimensions": 1536,
|
|
229
|
+
"api_key": "pk-..."
|
|
230
|
+
},
|
|
231
|
+
"llm": {
|
|
232
|
+
"provider": "portkey",
|
|
233
|
+
"model": "@openai/gpt-4o-mini",
|
|
234
|
+
"api_key": "pk-...",
|
|
235
|
+
"extra": { "virtual_key": "openai-prod" }
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
#### AWS Bedrock
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"qdrant_url": "https://your-cluster.cloud.qdrant.io:6333",
|
|
245
|
+
"qdrant_api_key": "your-key",
|
|
246
|
+
"embedding": {
|
|
247
|
+
"provider": "bedrock",
|
|
248
|
+
"model": "amazon.titan-embed-text-v2:0",
|
|
249
|
+
"dimensions": 1024
|
|
250
|
+
},
|
|
251
|
+
"llm": {
|
|
252
|
+
"provider": "bedrock",
|
|
253
|
+
"model": "us.anthropic.claude-sonnet-4-20250514",
|
|
254
|
+
"extra": { "region": "us-east-1" }
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Bedrock reads `embedding.extra.region` and `llm.extra.region`. `AWS_BEDROCK_REGION` populates both, falling back to `AWS_REGION`; `aws_profile` or `AWS_PROFILE` selects the shared AWS profile when you are not using direct env credentials.
|
|
260
|
+
|
|
261
|
+
### Multi-destination routing
|
|
262
|
+
|
|
263
|
+
Most users only need one Qdrant destination. Use `destinations[]` when you want one bikky install and one editor MCP connection to read or write separate memory stores for different teams, clients, or environments.
|
|
264
|
+
|
|
265
|
+
Each destination has its own Qdrant credentials and collection. Add `description` when you have more than one destination; MCP tools expose those descriptions so LLM clients can pick the right search scope.
|
|
266
|
+
|
|
267
|
+
Writes still target one destination. A destination can include a `match` block with JavaScript `RegExp` strings for `cwd`, `entity`, `content`, or `metadata`. Destinations are evaluated in array order; the first destination with any matching pattern wins. If no pattern matches, bikky uses the destination marked `default: true`, or the first destination.
|
|
268
|
+
|
|
269
|
+
Read tools (`memory_recall`, `memory_entity`, and `memory_relations`) can search one destination, the routed destination, or multiple destinations. Configure `default_search_scope` to control the default read behavior:
|
|
270
|
+
|
|
271
|
+
- `"routed"` — search the single destination selected by routing rules. This is the default and preserves older behavior.
|
|
272
|
+
- `"all"` — search every configured destination and merge/rerank the results.
|
|
273
|
+
- `"client-a"` — search one destination by name.
|
|
274
|
+
- `["client-a", "platform"]` — search a fixed list of destinations.
|
|
275
|
+
|
|
276
|
+
MCP clients can override this per call with `search_scope`. The value accepts `"routed"`, `"all"`, a destination name, a configured named scope, a comma-separated destination list, or an array of destination names. Do not combine `destination` and `search_scope`; keep `destination` for exact single-destination overrides, especially on write tools.
|
|
277
|
+
|
|
278
|
+
```jsonc
|
|
279
|
+
{
|
|
280
|
+
"embedding": {
|
|
281
|
+
"provider": "openai",
|
|
282
|
+
"model": "text-embedding-3-small",
|
|
283
|
+
"dimensions": 1536
|
|
284
|
+
},
|
|
285
|
+
"llm": {
|
|
286
|
+
"provider": "openai",
|
|
287
|
+
"model": "gpt-4.1-mini"
|
|
288
|
+
},
|
|
289
|
+
"default_search_scope": "routed",
|
|
290
|
+
"destinations": [
|
|
291
|
+
{
|
|
292
|
+
"name": "client-a",
|
|
293
|
+
"description": "Client A project memory. Use for Client A code, tickets, and operating context.",
|
|
294
|
+
"qdrant_url": "https://client-a.cloud.qdrant.io:6333",
|
|
295
|
+
"qdrant_api_key": "...",
|
|
296
|
+
"collection": "bikky-client-a",
|
|
297
|
+
"match": {
|
|
298
|
+
"cwd": ["^/Users/me/code/client-a"],
|
|
299
|
+
"entity": ["^client-a-"],
|
|
300
|
+
"content": ["client-a", "CLIENTA-\\d+"],
|
|
301
|
+
"metadata": { "project": ["^client-a$"] }
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"name": "research-cloud",
|
|
306
|
+
"description": "Research and experiment memory that may be useful across projects.",
|
|
307
|
+
"qdrant_url": "https://research.cloud.qdrant.io:6333",
|
|
308
|
+
"qdrant_api_key": "...",
|
|
309
|
+
"collection": "bikky-research",
|
|
310
|
+
"match": {
|
|
311
|
+
"content": ["[Rr]esearch[- ][Ll]ab"]
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"name": "platform",
|
|
316
|
+
"description": "Default platform engineering memory.",
|
|
317
|
+
"qdrant_url": "http://localhost:6333",
|
|
318
|
+
"qdrant_api_key": "",
|
|
319
|
+
"collection": "bikky-platform",
|
|
320
|
+
"default": true
|
|
321
|
+
}
|
|
322
|
+
],
|
|
323
|
+
"search_scopes": [
|
|
324
|
+
{
|
|
325
|
+
"name": "project-wide",
|
|
326
|
+
"description": "Search Client A and shared platform memory together when the answer may depend on both.",
|
|
327
|
+
"destinations": ["client-a", "platform"]
|
|
328
|
+
}
|
|
329
|
+
]
|
|
330
|
+
}
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Matching details:
|
|
334
|
+
|
|
335
|
+
- `match.cwd`, `match.entity`, and `match.content` are lists of JavaScript `RegExp` strings.
|
|
336
|
+
- `match.metadata` maps metadata keys to lists of JavaScript `RegExp` strings matched against that key's value.
|
|
337
|
+
- Matching uses OR logic across fields and within each list; any matching pattern selects the destination.
|
|
338
|
+
- Put the most specific destinations first because first match wins.
|
|
339
|
+
- JavaScript regex flags are not supported in config strings. Use character classes like `[Bb]ikky` for case-insensitive matching.
|
|
340
|
+
- Tool calls can override routing with an explicit destination name, for example `memory_store({ ..., destination: "client-a" })`.
|
|
341
|
+
- Read/search tools also accept `search_scope`; call `memory_search_scopes` or `get_setup_status` to see available scopes and descriptions.
|
|
342
|
+
- All destinations share one embedding provider, so every destination collection must use the same vector dimensions.
|
|
343
|
+
|
|
344
|
+
Migrating from `workspace_id` pre-v0.4:
|
|
345
|
+
|
|
346
|
+
- Existing top-level `qdrant_url`, `qdrant_api_key`, and `collection` configs still work as a single synthesized destination.
|
|
347
|
+
- The `workspace_id` argument on memory tools is a no-op for compatibility.
|
|
348
|
+
- Replace `default_workspace` scoping with named destinations when you need isolation.
|
|
349
|
+
|
|
350
|
+
### Daemon, watchers, and logs
|
|
351
|
+
|
|
352
|
+
You normally do not need to tune these. `bikky setup` starts the daemon and registers supported MCP clients.
|
|
353
|
+
|
|
354
|
+
#### Daemon settings
|
|
355
|
+
|
|
356
|
+
| Setting | Default | Description |
|
|
357
|
+
| ------------------------------------ | ------- | ------------------------------------------------ |
|
|
358
|
+
| `daemon.tick_interval_sec` | `5` | Seconds between daemon loop ticks |
|
|
359
|
+
| `daemon.extract_every_sec` | `300` | Seconds between extraction runs |
|
|
360
|
+
| `daemon.extract_min_events` | `10` | Minimum events before extraction |
|
|
361
|
+
| `daemon.consolidation_enabled` | `true` | Consolidate summaries into durable patterns |
|
|
362
|
+
| `daemon.relation_inference_enabled` | `true` | Infer entity relationships |
|
|
363
|
+
| `daemon.entity_typing_enabled` | `true` | Classify entities for UI/graph filtering |
|
|
364
|
+
| `daemon.staleness_threshold_days` | `30` | Days before a fact is flagged as stale |
|
|
365
|
+
|
|
366
|
+
#### Watcher settings
|
|
367
|
+
|
|
368
|
+
| Setting | Default | Description |
|
|
369
|
+
| -------------------------- | -------------------------- | --------------------------------- |
|
|
370
|
+
| `watchers.copilot.enabled` | `true` | Watch GitHub Copilot session logs |
|
|
371
|
+
| `watchers.copilot.path` | `~/.copilot/session-state` | Path to Copilot session directory |
|
|
372
|
+
| `watchers.claude.enabled` | `true` | Watch Claude Code project logs |
|
|
373
|
+
| `watchers.claude.path` | `~/.claude/projects` | Path to Claude Code projects |
|
|
374
|
+
|
|
375
|
+
Claude Code ingestion reads top-level `*.jsonl` transcripts inside each project directory under `watchers.claude.path`. It captures user/assistant text and skips tool calls, tool results, attachments, file snapshots, permission records, and thinking blocks.
|
|
376
|
+
|
|
377
|
+
Set either watcher `enabled` field to `false` to disable that transcript source. Set `daemon.extract_every_sec` to `0` to disable background extraction entirely while keeping MCP recall/search tools available.
|
|
378
|
+
|
|
379
|
+
#### Logs
|
|
380
|
+
|
|
381
|
+
bikky writes logs to `~/.bikky/logs/`:
|
|
382
|
+
|
|
383
|
+
| File | Written by |
|
|
384
|
+
| ------------ | ----------------- |
|
|
385
|
+
| `mcp.log` | MCP server |
|
|
386
|
+
| `daemon.log` | Background daemon |
|
|
387
|
+
| `llm.jsonl` | LLM telemetry |
|
|
388
|
+
|
|
389
|
+
Pretty-print logs with:
|
|
390
|
+
|
|
391
|
+
```bash
|
|
392
|
+
tail -f ~/.bikky/logs/daemon.log | npx pino-pretty
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Troubleshooting
|
|
396
|
+
|
|
397
|
+
Run:
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
bikky status
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
`bikky status` is read-only. It checks the config, Qdrant connection, collection readiness, embedding connectivity, daemon state, and local UI health. If something is missing or misconfigured, it exits non-zero and prints the next fix to make.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Privacy-first quickstart
|
|
2
|
+
|
|
3
|
+
Use this setup when you want to evaluate bikky with local storage and local model calls before opting into any hosted provider.
|
|
4
|
+
|
|
5
|
+
## What this protects
|
|
6
|
+
|
|
7
|
+
This guide keeps memory vectors, extracted facts, and transcript extraction model calls on your machine:
|
|
8
|
+
|
|
9
|
+
- Qdrant runs locally in Docker.
|
|
10
|
+
- Embeddings and LLM extraction use local Ollama models.
|
|
11
|
+
- Automatic transcript capture can be disabled entirely.
|
|
12
|
+
|
|
13
|
+
Package installation still talks to npm, Docker pulls images from its registry, and Ollama pulls models from its registry. After those dependencies are installed, bikky does not send memory data to a hosted vector store or hosted model provider unless you configure one.
|
|
14
|
+
|
|
15
|
+
## 1. Start local dependencies
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
docker run -d --name qdrant -p 6333:6333 -v qdrant_storage:/qdrant/storage qdrant/qdrant
|
|
19
|
+
|
|
20
|
+
ollama pull qwen3-embedding:0.6b
|
|
21
|
+
ollama pull qwen2.5:7b
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 2. Install bikky
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npm install -g bikky
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The package has a best-effort postinstall setup hook for convenience. For the most explicit first run, write your config first and then run `bikky setup` yourself.
|
|
31
|
+
|
|
32
|
+
## 3. Choose your capture mode
|
|
33
|
+
|
|
34
|
+
### Recall-only mode
|
|
35
|
+
|
|
36
|
+
Use this mode when you want MCP memory tools available but do not want bikky to read coding-agent transcripts in the background.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
mkdir -p ~/.bikky
|
|
40
|
+
cat > ~/.bikky/config.json <<'JSON'
|
|
41
|
+
{
|
|
42
|
+
"qdrant_url": "http://localhost:6333",
|
|
43
|
+
"qdrant_api_key": "",
|
|
44
|
+
"embedding": {
|
|
45
|
+
"provider": "ollama",
|
|
46
|
+
"model": "qwen3-embedding:0.6b",
|
|
47
|
+
"dimensions": 1024,
|
|
48
|
+
"base_url": "http://localhost:11434"
|
|
49
|
+
},
|
|
50
|
+
"llm": {
|
|
51
|
+
"provider": "ollama",
|
|
52
|
+
"model": "qwen2.5:7b",
|
|
53
|
+
"base_url": "http://localhost:11434"
|
|
54
|
+
},
|
|
55
|
+
"daemon": {
|
|
56
|
+
"extract_every_sec": 0
|
|
57
|
+
},
|
|
58
|
+
"watchers": {
|
|
59
|
+
"copilot": { "enabled": false },
|
|
60
|
+
"claude": { "enabled": false }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
JSON
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Local-only capture mode
|
|
67
|
+
|
|
68
|
+
Use this mode when you want automatic memory extraction from supported local coding-agent transcripts, but still want extraction model calls to stay local.
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"qdrant_url": "http://localhost:6333",
|
|
73
|
+
"qdrant_api_key": "",
|
|
74
|
+
"embedding": {
|
|
75
|
+
"provider": "ollama",
|
|
76
|
+
"model": "qwen3-embedding:0.6b",
|
|
77
|
+
"dimensions": 1024,
|
|
78
|
+
"base_url": "http://localhost:11434"
|
|
79
|
+
},
|
|
80
|
+
"llm": {
|
|
81
|
+
"provider": "ollama",
|
|
82
|
+
"model": "qwen2.5:7b",
|
|
83
|
+
"base_url": "http://localhost:11434"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
In this mode, the daemon reads supported transcript locations on your machine:
|
|
89
|
+
|
|
90
|
+
- GitHub Copilot session state: `~/.copilot/session-state`
|
|
91
|
+
- Claude Code project transcripts: `~/.claude/projects`
|
|
92
|
+
|
|
93
|
+
It sends extracted transcript snippets only to the configured local Ollama endpoint. If you switch `embedding.provider`, `llm.provider`, or Qdrant to hosted services later, the relevant facts, vectors, or model inputs will leave your machine for those configured providers.
|
|
94
|
+
|
|
95
|
+
## 4. Start and verify
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
bikky setup
|
|
99
|
+
bikky status
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
If you change providers, watcher settings, or `daemon.extract_every_sec`, restart long-running processes:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
bikky stop && bikky start
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Restart your editor after setup so its MCP server process reloads the config.
|
|
109
|
+
|
|
110
|
+
## What can leave your machine
|
|
111
|
+
|
|
112
|
+
| Configuration choice | What leaves your machine |
|
|
113
|
+
| -------------------- | ------------------------ |
|
|
114
|
+
| Local Qdrant + Ollama | No memory payloads, vectors, or extraction model inputs leave through bikky. |
|
|
115
|
+
| Qdrant Cloud or hosted Qdrant | Stored facts, metadata, and vectors are sent to that Qdrant endpoint. |
|
|
116
|
+
| Hosted embedding provider | Text sent for embedding and resulting vectors are handled by that provider. |
|
|
117
|
+
| Hosted LLM provider | Transcript snippets selected for extraction, curation, or distillation are sent to that provider. |
|
|
118
|
+
| MCP client integration | Tool calls and tool results are visible to the MCP client that invoked them. |
|
|
119
|
+
|
|
120
|
+
## Turning capture off later
|
|
121
|
+
|
|
122
|
+
To stop background transcript extraction while keeping search/recall tools available:
|
|
123
|
+
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"daemon": {
|
|
127
|
+
"extract_every_sec": 0
|
|
128
|
+
},
|
|
129
|
+
"watchers": {
|
|
130
|
+
"copilot": { "enabled": false },
|
|
131
|
+
"claude": { "enabled": false }
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Then restart bikky:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
bikky stop && bikky start
|
|
140
|
+
```
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,22 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bikky",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Shared memory for AI coding sessions — MCP server + background daemon",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "AGPL-3.0-or-later",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "https://github.com/bikky-dev/bikky.git"
|
|
9
|
+
"url": "git+https://github.com/bikky-dev/bikky.git"
|
|
10
10
|
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/bikky-dev/bikky/issues"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/bikky-dev/bikky#readme",
|
|
11
15
|
"bin": {
|
|
12
|
-
"bikky": "
|
|
16
|
+
"bikky": "bin/bikky.js"
|
|
13
17
|
},
|
|
14
18
|
"exports": {
|
|
15
19
|
".": "./dist/mcp/index.js"
|
|
16
20
|
},
|
|
17
21
|
"files": [
|
|
18
|
-
"
|
|
22
|
+
"CONTRIBUTING.md",
|
|
23
|
+
"SECURITY.md",
|
|
24
|
+
"CODE_OF_CONDUCT.md",
|
|
25
|
+
"SUPPORT.md",
|
|
26
|
+
"CHANGELOG.md",
|
|
27
|
+
"dist/**/*.js",
|
|
28
|
+
"dist/**/*.d.ts",
|
|
29
|
+
"!dist/**/*.test.js",
|
|
30
|
+
"!dist/**/*.test.d.ts",
|
|
31
|
+
"!dist/**/*.itest.js",
|
|
32
|
+
"!dist/**/*.itest.d.ts",
|
|
19
33
|
"bin/",
|
|
34
|
+
"docs/configuration.md",
|
|
35
|
+
"docs/privacy-first.md",
|
|
36
|
+
"docs/config/",
|
|
20
37
|
"docs/diagrams/",
|
|
21
38
|
"docs/screenshots/"
|
|
22
39
|
],
|
|
@@ -31,6 +48,7 @@
|
|
|
31
48
|
"check": "tsc --noEmit && eslint src/",
|
|
32
49
|
"test": "tsc && node --test --test-concurrency=1 $(find dist -name '*.test.js')",
|
|
33
50
|
"test:integration": "tsc && BIKKY_INTEGRATION=${BIKKY_INTEGRATION:-1} node --test $(find dist -name '*.itest.js')",
|
|
51
|
+
"verify:package": "node scripts/verify-package.mjs",
|
|
34
52
|
"build:diagrams": "node scripts/build-diagrams.mjs",
|
|
35
53
|
"prepublishOnly": "npm run build"
|
|
36
54
|
},
|
|
@@ -41,9 +59,9 @@
|
|
|
41
59
|
"zod": "^3.24.0"
|
|
42
60
|
},
|
|
43
61
|
"devDependencies": {
|
|
44
|
-
"@types/node": "^
|
|
45
|
-
"eslint": "^
|
|
46
|
-
"typescript": "^
|
|
62
|
+
"@types/node": "^25.6.0",
|
|
63
|
+
"eslint": "^10.3.0",
|
|
64
|
+
"typescript": "^6.0.3",
|
|
47
65
|
"typescript-eslint": "^8.0.0"
|
|
48
66
|
},
|
|
49
67
|
"overrides": {
|
|
@@ -52,6 +70,9 @@
|
|
|
52
70
|
"engines": {
|
|
53
71
|
"node": ">=20.0.0"
|
|
54
72
|
},
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public"
|
|
75
|
+
},
|
|
55
76
|
"keywords": [
|
|
56
77
|
"mcp",
|
|
57
78
|
"memory",
|
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|