Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/visible-semantic-indexing.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@kilocode/cli": patch
"kilo-code": patch
---

Access semantic indexing without an experimental feature toggle while keeping indexing disabled until enabled globally or for a project.
46 changes: 7 additions & 39 deletions packages/kilo-docs/pages/customize/context/codebase-indexing.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ description: "Index your codebase for improved AI understanding"

Codebase Indexing enables semantic code search across your entire project using AI embeddings. Instead of searching for exact text matches, it understands the _meaning_ of your queries, helping Kilo Code find relevant code even when you don't know specific function names or file locations.

{% callout type="warning" title="Experimental" %}
Codebase Indexing is currently **experimental** in the CLI and the new VS Code extension. You must explicitly opt in before the feature becomes available — see the **Setup** section below. Behavior, configuration, and defaults may change in future releases.
{% callout type="info" title="Opt-in indexing" %}
Codebase Indexing is disabled by default. It starts only after you enable indexing globally or for an individual project. Configuring an embedding provider without enabling one of those toggles does not start indexing.
{% /callout %}

## What It Does
Expand All @@ -34,28 +34,10 @@ This enables natural language queries like "user authentication logic" or "datab
{% tabs %}
{% tab label="VSCode" %}

### 1. Enable the experimental flag

Codebase Indexing is gated behind an experimental flag. Until the flag is on, the Indexing UI is hidden and `semantic_search` is unavailable.

1. Open Kilo Code **Settings** → **Experimental**.
2. Toggle **Semantic Indexing** on.
3. The **Indexing** tab will appear in Settings and the indexing status indicator will appear at the bottom of the prompt input panel.

Alternatively, set `experimental.semantic_indexing` to `true` in your `kilo.jsonc`:

```json
{
"experimental": {
"semantic_indexing": true
}
}
```

### 2. Configure indexing
### Configure indexing

1. Open Kilo Code **Settings** → **Indexing**, or click the indexing indicator at the bottom of the prompt input panel.
2. Toggle **Enable Indexing** on.
2. Turn on **Global Enable** to index every workspace, or turn on **Enable for This Project** to index only the current workspace. Both toggles are off until explicitly enabled.
3. Pick an **Embedding Provider** and fill in its required fields.
4. Pick a **Vector Store** (`Qdrant` or `LanceDB`) and configure it.
5. Optionally adjust **Tuning Parameters** (search score, batch size, retries, max results).
Expand Down Expand Up @@ -106,23 +88,9 @@ The prompt input panel shows a compact indexing status indicator that reflects t
{% /tab %}
{% tab label="CLI" %}

### 1. Enable the experimental flag

Codebase Indexing is gated behind an experimental flag. Until the flag is on, the `/indexing` command is hidden and `semantic_search` is unavailable.

Set the flag in your `kilo.jsonc`:

```json
{
"experimental": {
"semantic_indexing": true
}
}
```

Restart the CLI for the change to take effect. The `/indexing` command (and aliases `/index`, `/embedding`) will appear in the command palette once the flag is active.
### Configure indexing

### 2. Configure indexing
The `/indexing` command (and aliases `/index`, `/embedding`) is available when the indexing plugin is installed. Indexing remains disabled until it is enabled globally or for the current project.

Open a Kilo TUI session and run:

Expand Down Expand Up @@ -198,7 +166,7 @@ When indexing is enabled, the CLI shows an indexing status badge at the bottom o
{% /tab %}
{% tab label="VSCode (Legacy)" %}

The legacy extension does not require an experimental flag.
The legacy extension uses its own Codebase Indexing settings panel.

### Open Codebase Indexing Settings

Expand Down
3 changes: 1 addition & 2 deletions packages/kilo-vscode/src/features.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ type PluginSpec = string | [string, Record<string, unknown>]

type ConfigLike = {
plugin?: readonly PluginSpec[] | null
experimental?: { semantic_indexing?: boolean } | null
}

export type Features = {
Expand All @@ -13,6 +12,6 @@ export type Features = {

export function configFeatures(config?: ConfigLike | null): Features {
return {
indexing: hasIndexingPlugin(config?.plugin ?? []) && config?.experimental?.semantic_indexing === true,
indexing: hasIndexingPlugin(config?.plugin ?? []),
}
}
40 changes: 11 additions & 29 deletions packages/kilo-vscode/tests/unit/indexing-utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,37 +85,19 @@ describe("indexing SSE mapping", () => {
})

describe("indexing feature detection", () => {
it("requires experimental.semantic_indexing when indexing plugin is present", () => {
expect(configFeatures({ plugin: ["kilo-indexing"] }).indexing).toBe(false)
expect(configFeatures({ plugin: ["kilo-indexing"], experimental: {} }).indexing).toBe(false)
expect(configFeatures({ plugin: ["kilo-indexing"], experimental: { semantic_indexing: false } }).indexing).toBe(
false,
)
it("enables indexing settings when the indexing plugin is present", () => {
expect(configFeatures({ plugin: ["kilo-indexing"] }).indexing).toBe(true)
})

it("detects supported indexing plugin specifiers when experimental.semantic_indexing is true", () => {
expect(configFeatures({ plugin: ["kilo-indexing"], experimental: { semantic_indexing: true } }).indexing).toBe(true)
expect(
configFeatures({ plugin: ["kilo-indexing@1.2.3"], experimental: { semantic_indexing: true } }).indexing,
).toBe(true)
expect(
configFeatures({ plugin: ["@kilocode/kilo-indexing"], experimental: { semantic_indexing: true } }).indexing,
).toBe(true)
expect(
configFeatures({ plugin: ["@kilocode/kilo-indexing@1.2.3"], experimental: { semantic_indexing: true } }).indexing,
).toBe(true)
expect(
configFeatures({
plugin: ["file:///tmp/.opencode/plugin/kilo-indexing.js"],
experimental: { semantic_indexing: true },
}).indexing,
).toBe(true)
expect(
configFeatures({
plugin: ["file:///tmp/node_modules/@kilocode/kilo-indexing/index.js"],
experimental: { semantic_indexing: true },
}).indexing,
).toBe(true)
it("detects supported indexing plugin specifiers", () => {
expect(configFeatures({ plugin: ["kilo-indexing"] }).indexing).toBe(true)
expect(configFeatures({ plugin: ["kilo-indexing@1.2.3"] }).indexing).toBe(true)
expect(configFeatures({ plugin: ["@kilocode/kilo-indexing"] }).indexing).toBe(true)
expect(configFeatures({ plugin: ["@kilocode/kilo-indexing@1.2.3"] }).indexing).toBe(true)
expect(configFeatures({ plugin: ["file:///tmp/.opencode/plugin/kilo-indexing.js"] }).indexing).toBe(true)
expect(configFeatures({ plugin: ["file:///tmp/node_modules/@kilocode/kilo-indexing/index.js"] }).indexing).toBe(
true,
)
})

it("ignores unrelated plugin lists", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,19 +164,6 @@ const ExperimentalTab: Component = () => {
</Switch>
</SettingsRow>

<SettingsRow
title={language.t("settings.experimental.semanticIndexing.title")}
description={language.t("settings.experimental.semanticIndexing.description")}
>
<Switch
checked={experimental().semantic_indexing ?? false}
onChange={(checked) => updateExperimental("semantic_indexing", checked)}
hideLabel
>
{language.t("settings.experimental.semanticIndexing.title")}
</Switch>
</SettingsRow>

<SettingsRow
title={language.t("settings.experimental.codebaseSearch.title")}
description={language.t("settings.experimental.codebaseSearch.description")}
Expand Down
3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/ar.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/br.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/bs.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/da.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/de.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1242,9 +1242,6 @@ export const dict = {
"settings.experimental.pasteSummary.description": "Don't summarize large pasted content",
"settings.experimental.batch.title": "Batch Tool",
"settings.experimental.batch.description": "Enable batching of multiple tool calls",
"settings.experimental.semanticIndexing.title": "Semantic Indexing",
"settings.experimental.semanticIndexing.description":
"Enable semantic codebase indexing and the semantic_search tool. Requires indexing configuration.",
"settings.experimental.codebaseSearch.title": "Codebase Search",
"settings.experimental.codebaseSearch.description": "Enable AI-powered natural language search across your codebase",
"settings.experimental.speechToText.title": "Speech to Text",
Expand Down
3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/es.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/fr.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/ja.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/ko.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/nl.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/no.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/pl.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/ru.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 0 additions & 3 deletions packages/kilo-vscode/webview-ui/src/i18n/th.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading