@tyvm/knowhow 0.0.89 → 0.0.90

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.
Files changed (87) hide show
  1. package/CONFIG.md +52 -0
  2. package/README.md +344 -29
  3. package/WORKER.md +169 -334
  4. package/autodoc/chat-guide.md +540 -0
  5. package/autodoc/cli-reference.md +765 -0
  6. package/autodoc/config-reference.md +541 -0
  7. package/autodoc/embeddings-guide.md +566 -0
  8. package/autodoc/generate-guide.md +477 -0
  9. package/autodoc/language-plugin-guide.md +443 -0
  10. package/autodoc/modules-guide.md +352 -0
  11. package/autodoc/plugins-guide.md +720 -0
  12. package/autodoc/quickstart-guide.md +129 -0
  13. package/autodoc/skills-guide.md +468 -0
  14. package/autodoc/worker-guide.md +526 -0
  15. package/package.json +1 -1
  16. package/src/ai.ts +33 -2
  17. package/src/config.ts +28 -4
  18. package/src/index.ts +22 -2
  19. package/src/processors/TokenCompressor.ts +2 -2
  20. package/src/processors/ToolResponseCache.ts +3 -3
  21. package/src/processors/tools/grepToolResponse.ts +9 -4
  22. package/src/processors/tools/jqToolResponse.ts +11 -6
  23. package/src/processors/tools/listStoredToolResponses.ts +1 -1
  24. package/src/processors/tools/tailToolResponse.ts +9 -4
  25. package/ts_build/package.json +1 -1
  26. package/ts_build/src/ai.js +18 -1
  27. package/ts_build/src/ai.js.map +1 -1
  28. package/ts_build/src/config.js +17 -2
  29. package/ts_build/src/config.js.map +1 -1
  30. package/ts_build/src/index.js +12 -2
  31. package/ts_build/src/index.js.map +1 -1
  32. package/ts_build/src/processors/TokenCompressor.js +2 -2
  33. package/ts_build/src/processors/TokenCompressor.js.map +1 -1
  34. package/ts_build/src/processors/ToolResponseCache.js +3 -3
  35. package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
  36. package/ts_build/src/processors/tools/grepToolResponse.d.ts +3 -1
  37. package/ts_build/src/processors/tools/grepToolResponse.js +8 -2
  38. package/ts_build/src/processors/tools/grepToolResponse.js.map +1 -1
  39. package/ts_build/src/processors/tools/jqToolResponse.d.ts +3 -1
  40. package/ts_build/src/processors/tools/jqToolResponse.js +10 -4
  41. package/ts_build/src/processors/tools/jqToolResponse.js.map +1 -1
  42. package/ts_build/src/processors/tools/listStoredToolResponses.js +1 -1
  43. package/ts_build/src/processors/tools/listStoredToolResponses.js.map +1 -1
  44. package/ts_build/src/processors/tools/tailToolResponse.d.ts +3 -1
  45. package/ts_build/src/processors/tools/tailToolResponse.js +8 -2
  46. package/ts_build/src/processors/tools/tailToolResponse.js.map +1 -1
  47. package/autodoc/chat.mdx +0 -20
  48. package/autodoc/cli.mdx +0 -11
  49. package/autodoc/plugins/asana.mdx +0 -47
  50. package/autodoc/plugins/downloader/downloader.mdx +0 -38
  51. package/autodoc/plugins/downloader/plugin.mdx +0 -37
  52. package/autodoc/plugins/downloader/types.mdx +0 -42
  53. package/autodoc/plugins/embedding.mdx +0 -41
  54. package/autodoc/plugins/figma.mdx +0 -45
  55. package/autodoc/plugins/github.mdx +0 -40
  56. package/autodoc/plugins/jira.mdx +0 -46
  57. package/autodoc/plugins/language.mdx +0 -37
  58. package/autodoc/plugins/linear.mdx +0 -35
  59. package/autodoc/plugins/notion.mdx +0 -38
  60. package/autodoc/plugins/plugins.mdx +0 -59
  61. package/autodoc/plugins/types.mdx +0 -51
  62. package/autodoc/plugins/vim.mdx +0 -39
  63. package/autodoc/tools/addInternalTools.mdx +0 -1
  64. package/autodoc/tools/agentCall.mdx +0 -1
  65. package/autodoc/tools/asana/definitions.mdx +0 -10
  66. package/autodoc/tools/asana/index.mdx +0 -12
  67. package/autodoc/tools/askHuman.mdx +0 -1
  68. package/autodoc/tools/callPlugin.mdx +0 -1
  69. package/autodoc/tools/embeddingSearch.mdx +0 -1
  70. package/autodoc/tools/execCommand.mdx +0 -1
  71. package/autodoc/tools/fileSearch.mdx +0 -1
  72. package/autodoc/tools/finalAnswer.mdx +0 -1
  73. package/autodoc/tools/github/definitions.mdx +0 -6
  74. package/autodoc/tools/github/index.mdx +0 -8
  75. package/autodoc/tools/index.mdx +0 -14
  76. package/autodoc/tools/lintFile.mdx +0 -7
  77. package/autodoc/tools/list.mdx +0 -16
  78. package/autodoc/tools/modifyFile.mdx +0 -7
  79. package/autodoc/tools/patch.mdx +0 -9
  80. package/autodoc/tools/readBlocks.mdx +0 -1
  81. package/autodoc/tools/readFile.mdx +0 -1
  82. package/autodoc/tools/scanFile.mdx +0 -1
  83. package/autodoc/tools/textSearch.mdx +0 -6
  84. package/autodoc/tools/types/fileblock.mdx +0 -1
  85. package/autodoc/tools/visionTool.mdx +0 -1
  86. package/autodoc/tools/writeFile.mdx +0 -1
  87. package/test-comprehensive.ts +0 -31
@@ -0,0 +1,541 @@
1
+ # `knowhow.json` Configuration Reference
2
+
3
+ This document describes how to configure Knowhow CLI using a `knowhow.json` file (local or global).
4
+
5
+ - **Local path:** `.knowhow/knowhow.json`
6
+ - **Global path:** `~/.knowhow/knowhow.json`
7
+
8
+ > **Format:** JSON object
9
+ > **Purpose:** Configure prompts, generation pipelines, embedding pipelines, plugins/modules, custom agents, MCP servers, model providers, chat UI, the worker sandbox, and language tooling (ycmd).
10
+
11
+ ---
12
+
13
+ ## Top-level keys
14
+
15
+ | Key | Type | Description | Example |
16
+ |---|---|---|---|
17
+ | `promptsDir` | `string` | Directory that contains prompt templates (`{promptName}.mdx`). | `.knowhow/prompts` |
18
+ | `sources` | `SourceConfig[]` | Generation pipeline(s) that turn inputs into generated outputs. | see “sources” section |
19
+ | `embedSources` | `EmbedSourceConfig[]` | Embedding pipeline(s) that turn inputs into embedding artifacts (often JSON). | see “embedSources” section |
20
+ | `embeddingModel` | `string` | Embedding model identifier used by the embedding pipeline. | `openai:EmbeddingAda2` *(value format depends on your setup)* |
21
+ | `plugins` | `PluginsConfig` | Enable/disable built-in plugins. | `{ "enabled": ["embeddings"], "disabled": [] }` |
22
+ | `pluginPackages` | `string[]` | Extra/custom plugin npm packages to load. | `["@myorg/knowhow-plugin-acme"]` |
23
+ | `modules` | `ModuleConfig[]` | Load custom npm modules that can add tools/agents/plugins/clients. | `[{"package":"@myorg/knowhow-module-x"}]` |
24
+ | `agents` | `AgentConfig[]` | Custom agent definitions (for generation/chat). | see “agents/assistants” section |
25
+ | `assistants` | `AgentConfig[]` | Additional/custom agent definitions (same shape as `agents`). | see “agents/assistants” section |
26
+ | `mcps` | `McpServerConfig[]` | MCP server configurations Knowhow can connect to. | see “mcps” section |
27
+ | `modelProviders` | `ModelProviderConfig[]` | Custom model provider endpoints. | see “modelProviders” section |
28
+ | `lintCommands` | `Record<string,string>` | Lint command per file extension. | `{ "ts": "eslint $1" }` |
29
+ | `chat` | `ChatConfig` | Chat runtime configuration (renderer + module wiring). | see “chat” section |
30
+ | `worker` | `WorkerConfig` | Worker execution and networking configuration. | see “worker” section |
31
+ | `skills` | `string[]` | Directories containing “skills” (domain/tool logic). | `[".knowhow/skills"]` |
32
+ | `files` | `FileSyncConfig` | File sync configuration (tooling-specific; schema varies by build). | see “files” section |
33
+ | `ycmd` | `YcmdConfig` | ycmd language-server configuration. | see “ycmd” section |
34
+
35
+ ---
36
+
37
+ ## `promptsDir`
38
+
39
+ - **Type:** `string`
40
+ - **Description:** Directory containing prompt templates as `{promptName}.mdx`.
41
+ - **How it’s used:** When a prompt name is referenced (e.g., `sources[].prompt`), Knowhow loads:
42
+ - `path.join(promptsDir, `${promptName}.mdx`)`
43
+ - **Example:**
44
+ ```json
45
+ {
46
+ "promptsDir": ".knowhow/prompts"
47
+ }
48
+ ```
49
+
50
+ ---
51
+
52
+ ## `sources` (generation pipeline)
53
+
54
+ - **Type:** `SourceConfig[]`
55
+ - **Description:** Defines how Knowhow generates outputs from inputs by selecting a prompt and (optionally) an agent and model.
56
+
57
+ ### `SourceConfig`
58
+
59
+ | Key | Type | Required | Description | Example |
60
+ |---|---|---:|---|---|
61
+ | `input` | `string` | ✅ | Input path/glob/identifier for this stage. | `src/**/*.mdx` |
62
+ | `output` | `string` | ✅ | Output path (file or directory target). | `.knowhow/docs/` |
63
+ | `prompt` | `string` | ✅ | Prompt name (from `promptsDir`) or a prompt reference. | `BasicCodeDocumenter` |
64
+ | `kind` | `string` | ❌ | Generation “kind” (mode/behavior); often tied to plugins. | `summarization` |
65
+ | `agent` | `string` | ❌ | Name of a custom agent used for this source. | `Example agent` |
66
+ | `model` | `string` | ❌ | Model override for this source. | `gpt-4o-2024-08-06` |
67
+ | `outputExt` | `string` | ❌ | Output file extension override. | `.mdx` |
68
+ | `outputName` | `string` | ❌ | Output file/base name override. | `README.mdx` |
69
+
70
+ ### Example
71
+ ```json
72
+ {
73
+ "sources": [
74
+ {
75
+ "input": "src/**/*.mdx",
76
+ "output": ".knowhow/docs/",
77
+ "prompt": "BasicCodeDocumenter"
78
+ },
79
+ {
80
+ "input": ".knowhow/docs/**/*.mdx",
81
+ "output": ".knowhow/docs/README.mdx",
82
+ "prompt": "BasicProjectDocumenter",
83
+ "kind": "project"
84
+ }
85
+ ]
86
+ }
87
+ ```
88
+
89
+ ---
90
+
91
+ ## `embedSources` (embedding pipeline)
92
+
93
+ - **Type:** `EmbedSourceConfig[]`
94
+ - **Description:** Defines how Knowhow creates embeddings from inputs, with optional chunking and optional remote/upload settings.
95
+
96
+ ### `EmbedSourceConfig`
97
+
98
+ | Key | Type | Required | Description | Example |
99
+ |---|---|---:|---|---|
100
+ | `input` | `string` | ✅ | Input path/glob/URL to embed. | `.knowhow/docs/**/*.mdx` |
101
+ | `output` | `string` | ✅ | Embedding artifact location (often JSON file). | `.knowhow/embeddings/docs.json` |
102
+ | `prompt` | `string` | ❌ | Optional preprocessing prompt name. | `BasicEmbeddingExplainer` |
103
+ | `kind` | `string` | ❌ | Embedding strategy/type (often plugin-driven). | `download` |
104
+ | `chunkSize` | `number` | ❌ | Chunk size for splitting content before embedding. | `2000` |
105
+ | `minLength` | `number` | ❌ | Minimum chunk length threshold. | `200` |
106
+ | `remote` | `string` | ❌ | Remote destination name/id (backend-specific). | `micahriggan/knowhow` |
107
+ | `remoteType` | `string` | ❌ | Remote backend type (e.g., `s3`, `github`). | `github` |
108
+ | `remoteId` | `string` | ❌ | Remote identity/index/collection id (backend-specific). | `docs-index-1` |
109
+ | `uploadMode` | `string` | ❌ | Upload/write mode (implementation-specific). | `overwrite` |
110
+
111
+ ### Example
112
+ ```json
113
+ {
114
+ "embedSources": [
115
+ {
116
+ "input": ".knowhow/docs/**/*.mdx",
117
+ "output": ".knowhow/embeddings/docs.json",
118
+ "prompt": "BasicEmbeddingExplainer",
119
+ "chunkSize": 2000
120
+ },
121
+ {
122
+ "input": "src/**/*.ts",
123
+ "output": ".knowhow/embeddings/code.json",
124
+ "chunkSize": 2000
125
+ }
126
+ ]
127
+ }
128
+ ```
129
+
130
+ ### Example: embedding with `download` kind (URL input)
131
+ ```json
132
+ {
133
+ "embedSources": [
134
+ {
135
+ "input": "https://www.youtube.com/shorts/BYuMBK5Ll-s",
136
+ "output": ".knowhow/embeddings/video.json",
137
+ "chunkSize": 2000,
138
+ "kind": "download"
139
+ }
140
+ ]
141
+ }
142
+ ```
143
+
144
+ ---
145
+
146
+ ## `embeddingModel`
147
+
148
+ - **Type:** `string`
149
+ - **Description:** Embedding model identifier used by embedding tasks.
150
+ - **Example:**
151
+ ```json
152
+ {
153
+ "embeddingModel": "openai:EmbeddingAda2"
154
+ }
155
+ ```
156
+
157
+ > Use the exact identifier format your Knowhow build expects (commonly defined by an `EmbeddingModels` enum/constant).
158
+
159
+ ---
160
+
161
+ ## `plugins`
162
+
163
+ - **Type:**
164
+ ```ts
165
+ {
166
+ enabled: string[];
167
+ disabled: string[];
168
+ }
169
+ ```
170
+ - **Description:** Enables/disables built-in plugins by name.
171
+
172
+ | Key | Type | Description | Example |
173
+ |---|---|---|---|
174
+ | `enabled` | `string[]` | List of enabled plugin identifiers. | `["embeddings","git"]` |
175
+ | `disabled` | `string[]` | List of disabled plugin identifiers. | `["github"]` |
176
+
177
+ ### Example
178
+ ```json
179
+ {
180
+ "plugins": {
181
+ "enabled": ["embeddings", "language", "git", "exec"],
182
+ "disabled": []
183
+ }
184
+ }
185
+ ```
186
+
187
+ ---
188
+
189
+ ## `pluginPackages`
190
+
191
+ - **Type:** `string[]`
192
+ - **Description:** NPM package names to load additional/custom plugins from.
193
+
194
+ ### Example
195
+ ```json
196
+ {
197
+ "pluginPackages": ["@myorg/knowhow-plugin-acme"]
198
+ }
199
+ ```
200
+
201
+ ---
202
+
203
+ ## `modules`
204
+
205
+ - **Type:** `ModuleConfig[]` *(commonly represented as `{ package: string }` objects)*
206
+ - **Description:** Load custom npm modules that can provide tools/agents/plugins/clients.
207
+
208
+ ### `ModuleConfig` (representative)
209
+ | Key | Type | Required | Description | Example |
210
+ |---|---|---:|---|---|
211
+ | `package` | `string` | ✅ | NPM package name (or module identifier) to load. | `@myorg/knowhow-module-mycopilot` |
212
+
213
+ ### Example
214
+ ```json
215
+ {
216
+ "modules": [
217
+ { "package": "@myorg/knowhow-module-custom-tools" },
218
+ { "package": "@myorg/knowhow-module-chat-ui" }
219
+ ]
220
+ }
221
+ ```
222
+
223
+ ---
224
+
225
+ ## `agents` / `assistants`
226
+
227
+ - **Type:** `AgentConfig[]`
228
+ - **Description:** Custom agent definitions usable by generation/chat.
229
+ - **Note:** Both keys typically share the same schema; `assistants` may be treated as an alias/parallel list.
230
+
231
+ ### `AgentConfig`
232
+
233
+ | Key | Type | Required | Description | Example |
234
+ |---|---|---:|---|---|
235
+ | `name` | `string` | ✅ | Agent identifier referenced by `sources[].agent`. | `Example agent` |
236
+ | `description` | `string` | ❌ | Short human-readable description. | `Docs writer` |
237
+ | `instructions` | `string` | ✅ | Agent system/developer instructions. | `Reply with ...` |
238
+ | `model` | `string` | ❌ | Model override used by this agent. | `gpt-4o-2024-08-06` |
239
+ | `provider` | `string` | ❌/✅ | Model provider key used by this agent. | `openai` |
240
+ | `tools` | `string[]` | ❌ | Tool names the agent is allowed to use. | `["git","exec"]` |
241
+ | `files` | `string[]` | ❌ | Files/dirs/globs provided as context for this agent. | `[".knowhow/docs/"]` |
242
+
243
+ ### Example
244
+ ```json
245
+ {
246
+ "agents": [
247
+ {
248
+ "name": "Example agent",
249
+ "description": "You can define agents in the config. They will have access to all tools.",
250
+ "instructions": "Reply to the user saying 'Hello, world!'",
251
+ "model": "gpt-4o-2024-08-06",
252
+ "provider": "openai"
253
+ }
254
+ ]
255
+ }
256
+ ```
257
+
258
+ ### Example: agent with `tools` and `files`
259
+ ```json
260
+ {
261
+ "agents": [
262
+ {
263
+ "name": "Docs agent",
264
+ "description": "Writes and updates project documentation.",
265
+ "instructions": "Summarize changes and update docs with a clear changelog.",
266
+ "model": "gpt-4o-2024-08-06",
267
+ "provider": "openai",
268
+ "tools": ["git", "exec"],
269
+ "files": [".knowhow/docs/"]
270
+ }
271
+ ]
272
+ }
273
+ ```
274
+
275
+ ---
276
+
277
+ ## `mcps` (MCP servers)
278
+
279
+ - **Type:** `McpServerConfig[]`
280
+ - **Description:** Configure MCP servers Knowhow can spawn or connect to.
281
+
282
+ ### `McpServerConfig`
283
+
284
+ | Key | Type | Required | Description | Example |
285
+ |---|---|---:|---|---|
286
+ | `name` | `string` | ✅ | MCP server name. | `browser` |
287
+ | `command` | `string` | ❌ | Command used to start the MCP server. | `npx` |
288
+ | `args` | `string[]` | ❌ | Arguments for `command`. | `["-y","@playwright/mcp@latest", "..."]` |
289
+ | `url` | `string` | ❌ | Remote MCP URL (if applicable). | `http://localhost:3000` |
290
+ | `autoConnect` | `boolean` | ❌ | Whether Knowhow connects automatically. | `true` |
291
+
292
+ ### Example
293
+ ```json
294
+ {
295
+ "mcps": [
296
+ {
297
+ "name": "browser",
298
+ "command": "npx",
299
+ "args": ["-y", "@playwright/mcp@latest", "--browser", "chrome"],
300
+ "autoConnect": true
301
+ }
302
+ ]
303
+ }
304
+ ```
305
+
306
+ ---
307
+
308
+ ## `modelProviders`
309
+
310
+ - **Type:** `ModelProviderConfig[]`
311
+ - **Description:** Register custom model providers/endpoints.
312
+
313
+ ### `ModelProviderConfig`
314
+
315
+ | Key | Type | Required | Description | Example |
316
+ |---|---|---:|---|---|
317
+ | `url` | `string` | ✅ | Base URL of the provider endpoint. | `http://localhost:1234` |
318
+ | `provider` | `string` | ✅ | Provider key/name used by `agents.provider`. | `lms` |
319
+ | `jwtFile` | `string` | ❌ | Path to a JWT file for auth. | `~/.knowhow/.jwt/myprovider.jwt` |
320
+
321
+ ### Example
322
+ ```json
323
+ {
324
+ "modelProviders": [
325
+ { "url": "http://localhost:1234", "provider": "lms" }
326
+ ]
327
+ }
328
+ ```
329
+
330
+ ---
331
+
332
+ ## `lintCommands`
333
+
334
+ - **Type:** `Record<string,string>`
335
+ - **Description:** Map file extensions to lint commands.
336
+ - Common behavior: keys are extensions like `"ts"`, and the command is run with `$1` replaced by the patched file path.
337
+
338
+ ### Example
339
+ ```json
340
+ {
341
+ "lintCommands": {
342
+ "js": "eslint $1",
343
+ "ts": "eslint $1"
344
+ }
345
+ }
346
+ ```
347
+
348
+ ---
349
+
350
+ ## `chat`
351
+
352
+ - **Type:** `ChatConfig`
353
+ - **Description:** Configure chat renderer and module wiring.
354
+
355
+ ### `ChatConfig`
356
+
357
+ | Key | Type | Required | Description | Example |
358
+ |---|---|---:|---|---|
359
+ | `renderer` | `string` | ❌ | Renderer module name/path. | `default` |
360
+ | `modules` | `string[]` | ❌ | Chat modules to load. | `["@myorg/knowhow-chat-ui"]` |
361
+ | `rootModule` | `string` | ❌ | Root module entry. | `knowhow-chat` |
362
+
363
+ ### Example
364
+ ```json
365
+ {
366
+ "chat": {
367
+ "renderer": "default",
368
+ "modules": ["@myorg/knowhow-chat-ui"],
369
+ "rootModule": "knowhow-chat"
370
+ }
371
+ }
372
+ ```
373
+
374
+ ---
375
+
376
+ ## `worker`
377
+
378
+ - **Type:** `WorkerConfig`
379
+ - **Description:** Worker execution/sandbox/tunnel configuration for tools.
380
+
381
+ ### `worker` keys
382
+
383
+ | Key | Type | Required | Description | Example |
384
+ |---|---|---:|---|---|
385
+ | `allowedTools` | `string[]` | ❌ | Tool names permitted to run in the worker. | `["exec","download"]` |
386
+ | `sandbox` | `boolean` | ❌ | Enable/disable sandboxing for tool execution. | `true` |
387
+ | `volumes` | `string[]` | ❌ | Volume mounts (implementation-dependent). | `[".:/workspace"]` |
388
+ | `envFile` | `string` | ❌ | Path to an env file loaded by the worker. | `.env.worker` |
389
+ | `tunnel` | `WorkerTunnelConfig` | ❌ | Network tunnel configuration. | see below |
390
+
391
+ ### `worker.tunnel`
392
+
393
+ - **Type:**
394
+ ```ts
395
+ {
396
+ enabled: boolean;
397
+ allowedPorts: number[];
398
+ }
399
+ ```
400
+
401
+ ### Example
402
+ ```json
403
+ {
404
+ "worker": {
405
+ "allowedTools": ["exec", "download"],
406
+ "sandbox": true,
407
+ "volumes": [".:/workspace"],
408
+ "envFile": ".env.worker",
409
+ "tunnel": {
410
+ "enabled": true,
411
+ "allowedPorts": [3000, 8080]
412
+ }
413
+ }
414
+ }
415
+ ```
416
+
417
+ ---
418
+
419
+ ## `skills`
420
+
421
+ - **Type:** `string[]`
422
+ - **Description:** Directories to scan for “skills” definitions.
423
+
424
+ ### Example
425
+ ```json
426
+ {
427
+ "skills": [".knowhow/skills", "skills"]
428
+ }
429
+ ```
430
+
431
+ ---
432
+
433
+ ## `files` (file sync config)
434
+
435
+ - **Type:** `FileSyncConfig` *(schema varies by Knowhow build/version)*
436
+ - **Description:** Configure how files are synced between local filesystem and Knowhow’s filesystem/runtime.
437
+
438
+ ### Example (illustrative shape)
439
+ ```json
440
+ {
441
+ "files": {
442
+ "syncDir": ".knowhow/sync",
443
+ "include": ["src/**/*", ".knowhow/docs/**/*"],
444
+ "exclude": ["**/node_modules/**", "**/.git/**"]
445
+ }
446
+ }
447
+ ```
448
+
449
+ > If you paste your `Config`/`FileSyncConfig` type from `src/types.ts`, I can replace this “illustrative shape” with the exact keys/types.
450
+
451
+ ---
452
+
453
+ ## `ycmd` (language server)
454
+
455
+ - **Type:** `YcmdConfig`
456
+ - **Description:** Configure the ycmd language server.
457
+
458
+ ### `YcmdConfig`
459
+
460
+ | Key | Type | Required | Description | Example |
461
+ |---|---|---:|---|---|
462
+ | `enabled` | `boolean` | ❌ | Whether ycmd is enabled. | `true` |
463
+ | `installPath` | `string` | ❌ | ycmd install path. | `~/.knowhow/ycmd` |
464
+ | `port` | `number` | ❌ | Listening port (`0` may mean “auto”). | `0` |
465
+ | `logLevel` | `string` | ❌ | Logging verbosity. | `info` |
466
+ | `completionTimeout` | `number` | ❌ | Completion request timeout (ms). | `5000` |
467
+
468
+ ### Example
469
+ ```json
470
+ {
471
+ "ycmd": {
472
+ "enabled": true,
473
+ "installPath": "~/.knowhow/ycmd",
474
+ "port": 0,
475
+ "logLevel": "debug",
476
+ "completionTimeout": 10000
477
+ }
478
+ }
479
+ ```
480
+
481
+ ---
482
+
483
+ ## Minimal `knowhow.json` example
484
+
485
+ ```json
486
+ {
487
+ "promptsDir": ".knowhow/prompts",
488
+ "plugins": {
489
+ "enabled": ["embeddings", "language", "git", "exec"],
490
+ "disabled": []
491
+ },
492
+ "lintCommands": {
493
+ "ts": "eslint $1",
494
+ "js": "eslint $1"
495
+ },
496
+ "sources": [
497
+ {
498
+ "input": "src/**/*.mdx",
499
+ "output": ".knowhow/docs/",
500
+ "prompt": "BasicCodeDocumenter"
501
+ }
502
+ ],
503
+ "embedSources": [
504
+ {
505
+ "input": ".knowhow/docs/**/*.mdx",
506
+ "output": ".knowhow/embeddings/docs.json",
507
+ "prompt": "BasicEmbeddingExplainer",
508
+ "chunkSize": 2000
509
+ }
510
+ ],
511
+ "embeddingModel": "openai:EmbeddingAda2",
512
+ "agents": [
513
+ {
514
+ "name": "Example agent",
515
+ "instructions": "Reply to the user saying 'Hello, world!'",
516
+ "model": "gpt-4o-2024-08-06",
517
+ "provider": "openai"
518
+ }
519
+ ],
520
+ "mcps": [
521
+ {
522
+ "name": "browser",
523
+ "command": "npx",
524
+ "args": ["-y", "@playwright/mcp@latest", "--browser", "chrome"]
525
+ }
526
+ ],
527
+ "modelProviders": [{ "url": "http://localhost:1234", "provider": "lms" }],
528
+ "worker": {
529
+ "tunnel": { "enabled": false, "allowedPorts": [] }
530
+ }
531
+ }
532
+ ```
533
+
534
+ ---
535
+
536
+ ### Want this to be 100% exact to your codebase?
537
+ If you paste `src/config.ts` and `src/types.ts` (the actual `Config`, `SourceConfig`, `EmbedSourceConfig`, `WorkerConfig`, `FileSyncConfig`, and `YcmdConfig` type definitions), I can regenerate this reference with:
538
+ - exact field names (no illustrative placeholders),
539
+ - exact optional/required fields,
540
+ - exact union literal types (e.g., allowed `uploadMode` values, `logLevel` enum values),
541
+ - and the real list of built-in plugin names + what each one does.