Skip to content

feat(vscode): add native notebook tools#11644

Merged
imanolmzd-svg merged 22 commits into
mainfrom
mark/native-notebook-tools
Jun 25, 2026
Merged

feat(vscode): add native notebook tools#11644
imanolmzd-svg merged 22 commits into
mainfrom
mark/native-notebook-tools

Conversation

@markijbema

@markijbema markijbema commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

What changed

Adds native notebook tools to the VS Code extension so agents can read, edit, and execute notebook cells without requiring users to configure a separate MCP server.

The CLI exposes three VS Code-only tools with separate permissions. Requests are routed over the existing authenticated CLI/extension connection to a singleton extension-host bridge, which operates on the live VS Code notebook model and selected controller. Notebook paths are scoped to the requesting workspace or Agent Manager worktree, edits preserve undo/redo and dirty state, and outputs are bounded before returning to the model.

Why

Direct VS Code notebook access keeps unsaved cell state, notebook edits, execution results, and the selected kernel in one source of truth. It avoids another localhost server, port ownership, MCP configuration, and multi-window behavior inherited from standalone notebook MCP extensions.

Jupyter remains optional. Reading and editing use stable VS Code notebook APIs, while execution requires an existing selected notebook controller and does not change editor focus or open the kernel picker.

CleanShot 2026-06-25 at 14 50 52

Limitations

creating a fresh notebook doesnt seem to work well; not sure if thats prompting, whether that needs another tool or whatever. I think it's good enough to merge as experimental though

@markijbema markijbema marked this pull request as ready for review June 24, 2026 15:14
Comment thread packages/opencode/src/tool/registry.ts Outdated
Comment thread packages/kilo-vscode/src/services/notebook/bridge.ts
Comment thread packages/kilo-vscode/src/services/notebook/output.ts Outdated
@kilo-code-bot

kilo-code-bot Bot commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Code Review Summary

Status: 1 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0

Fix these issues in Kilo Cloud

Issue Details (click to expand)

WARNING

File Line Issue
packages/opencode/src/kilocode/tool/notebook-host.ts 150 Flattening notebook_edit moved the kind/source validation behind ctx.ask(...), so malformed insert/replace calls now trigger the notebook edit permission flow before the tool rejects them.
Files Reviewed (2 files)
  • packages/opencode/src/kilocode/tool/notebook-host.ts - 1 issue
  • packages/opencode/test/kilocode/notebook-tools.test.ts
Previous Review Summaries (16 snapshots, latest commit 5271db7)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit 5271db7)

Status: 1 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0

Fix these issues in Kilo Cloud

Issue Details (click to expand)

WARNING

File Line Issue
packages/opencode/src/kilocode/tool/notebook-host.ts 150 Flattening notebook_edit moved the kind/source validation behind ctx.ask(...), so malformed insert/replace calls now trigger the notebook edit permission flow before the tool rejects them.
Files Reviewed (2 files)
  • packages/opencode/src/kilocode/tool/notebook-host.ts - 1 issue
  • packages/opencode/test/kilocode/notebook-tools.test.ts

Previous review (commit 00e9299)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (21 files)
  • packages/kilo-vscode/src/services/notebook/adapter.ts
  • packages/kilo-vscode/src/services/notebook/revision.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ar.ts
  • packages/kilo-vscode/webview-ui/src/i18n/br.ts
  • packages/kilo-vscode/webview-ui/src/i18n/bs.ts
  • packages/kilo-vscode/webview-ui/src/i18n/da.ts
  • packages/kilo-vscode/webview-ui/src/i18n/de.ts
  • packages/kilo-vscode/webview-ui/src/i18n/es.ts
  • packages/kilo-vscode/webview-ui/src/i18n/fr.ts
  • packages/kilo-vscode/webview-ui/src/i18n/it.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ja.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ko.ts
  • packages/kilo-vscode/webview-ui/src/i18n/nl.ts
  • packages/kilo-vscode/webview-ui/src/i18n/no.ts
  • packages/kilo-vscode/webview-ui/src/i18n/pl.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ru.ts
  • packages/kilo-vscode/webview-ui/src/i18n/th.ts
  • packages/kilo-vscode/webview-ui/src/i18n/tr.ts
  • packages/kilo-vscode/webview-ui/src/i18n/uk.ts
  • packages/kilo-vscode/webview-ui/src/i18n/zh.ts
  • packages/kilo-vscode/webview-ui/src/i18n/zht.ts

Previous review (commit 092bfc9)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (1 files)
  • packages/opencode/src/kilocode/agent/index.ts

Previous review (commit 9bbb6d5)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (1 files)
  • packages/opencode/test/server/httpapi-exercise/index.ts

Previous review (commit 831514e)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (29 files)
  • packages/kilo-vscode/webview-ui/src/components/settings/ExperimentalTab.tsx
  • packages/kilo-vscode/webview-ui/src/i18n/ar.ts
  • packages/kilo-vscode/webview-ui/src/i18n/br.ts
  • packages/kilo-vscode/webview-ui/src/i18n/bs.ts
  • packages/kilo-vscode/webview-ui/src/i18n/da.ts
  • packages/kilo-vscode/webview-ui/src/i18n/de.ts
  • packages/kilo-vscode/webview-ui/src/i18n/en.ts
  • packages/kilo-vscode/webview-ui/src/i18n/es.ts
  • packages/kilo-vscode/webview-ui/src/i18n/fr.ts
  • packages/kilo-vscode/webview-ui/src/i18n/it.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ja.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ko.ts
  • packages/kilo-vscode/webview-ui/src/i18n/nl.ts
  • packages/kilo-vscode/webview-ui/src/i18n/no.ts
  • packages/kilo-vscode/webview-ui/src/i18n/pl.ts
  • packages/kilo-vscode/webview-ui/src/i18n/ru.ts
  • packages/kilo-vscode/webview-ui/src/i18n/th.ts
  • packages/kilo-vscode/webview-ui/src/i18n/tr.ts
  • packages/kilo-vscode/webview-ui/src/i18n/uk.ts
  • packages/kilo-vscode/webview-ui/src/i18n/zh.ts
  • packages/kilo-vscode/webview-ui/src/i18n/zht.ts
  • packages/kilo-vscode/webview-ui/src/types/messages/config.ts
  • packages/opencode/src/config/config.ts
  • packages/opencode/src/kilocode/agent/index.ts
  • packages/opencode/src/kilocode/tool/registry.ts
  • packages/opencode/test/kilocode/notebook-tools.test.ts
  • packages/opencode/test/kilocode/tool-registry-indexing.test.ts
  • packages/sdk/js/src/v2/gen/types.gen.ts
  • packages/sdk/openapi.json

Previous review (commit 75fe210)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (2 files)
  • packages/kilo-vscode/src/services/notebook/bridge.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts

Previous review (commit 409aaf8)

Status: 1 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 0
WARNING 1
SUGGESTION 0

Fix these issues in Kilo Cloud

Issue Details (click to expand)

WARNING

File Line Issue
packages/kilo-vscode/src/services/notebook/adapter.ts 127 read() still calls this.remember(...) before the bounded range reads, and notebookState() fingerprints every cell with cell.document.getText(). Large notebook reads therefore still materialize every cell's full source once per request, so this patch only removes the second extraction pass instead of fixing the extension-host memory/CPU pressure it targets.
Files Reviewed (2 files)
  • packages/kilo-vscode/src/services/notebook/adapter.ts - 1 issue
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts

Previous review (commit 54afdd0)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (2 files)
  • packages/kilo-vscode/src/services/notebook/bridge.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts

Previous review (commit ee862d8)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (6 files)
  • packages/kilo-vscode/src/services/notebook/types.ts
  • packages/opencode/src/kilocode/notebook/protocol.ts
  • packages/opencode/src/kilocode/tool/notebook-host.ts
  • packages/opencode/test/kilocode/notebook-tools.test.ts
  • packages/sdk/js/src/v2/gen/types.gen.ts
  • packages/sdk/openapi.json

Previous review (commit 3cd5214)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (3 files)
  • packages/kilo-vscode/src/services/cli-backend/connection-service.test.ts
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts
  • packages/kilo-vscode/src/services/notebook/adapter.ts

Previous review (commit b0747d2)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (3 files)
  • packages/kilo-vscode/src/services/notebook/adapter.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts

Previous review (commit 75d13ef)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (15 files)
  • .changeset/native-notebook-tools.md
  • packages/kilo-vscode/src/services/notebook/adapter.ts
  • packages/kilo-vscode/src/services/notebook/bridge.ts
  • packages/kilo-vscode/src/services/notebook/path.ts
  • packages/kilo-vscode/src/services/notebook/revision.ts
  • packages/kilo-vscode/src/services/notebook/types.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts
  • packages/opencode/src/kilocode/notebook/protocol.ts
  • packages/opencode/src/kilocode/notebook/service.ts
  • packages/opencode/src/kilocode/tool/notebook-host.ts
  • packages/opencode/test/kilocode/notebook-service.test.ts
  • packages/opencode/test/kilocode/notebook-tools.test.ts
  • packages/sdk/js/src/v2/gen/types.gen.ts
  • packages/sdk/openapi.json

Previous review (commit 2a17d49)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (32 files)
  • .changeset/native-notebook-tools.md
  • .kilo/plans/1782310595680-native-notebook-tools.md
  • packages/kilo-vscode/src/extension.ts
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts
  • packages/kilo-vscode/src/services/notebook/adapter.ts
  • packages/kilo-vscode/src/services/notebook/bridge.ts
  • packages/kilo-vscode/src/services/notebook/index.ts
  • packages/kilo-vscode/src/services/notebook/output.ts
  • packages/kilo-vscode/src/services/notebook/path.ts
  • packages/kilo-vscode/src/services/notebook/types.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts
  • packages/opencode/src/config/permission.ts
  • packages/opencode/src/effect/app-runtime.ts
  • packages/opencode/src/kilocode/agent/index.ts
  • packages/opencode/src/kilocode/notebook/protocol.ts
  • packages/opencode/src/kilocode/notebook/service.ts
  • packages/opencode/src/kilocode/server/httpapi/groups/kilocode.ts
  • packages/opencode/src/kilocode/server/httpapi/handlers/kilocode.ts
  • packages/opencode/src/kilocode/tool/notebook-host.ts
  • packages/opencode/src/kilocode/tool/registry.ts
  • packages/opencode/src/server/routes/instance/httpapi/server.ts
  • packages/opencode/src/tool/registry.ts
  • packages/opencode/test/kilocode/notebook-service.test.ts
  • packages/opencode/test/kilocode/notebook-tools.test.ts
  • packages/opencode/test/kilocode/tool-registry-indexing-import-failure.test.ts
  • packages/opencode/test/kilocode/tool-registry-indexing.test.ts
  • packages/opencode/test/kilocode/tool-registry-semantic-import-failure.test.ts
  • packages/opencode/test/server/httpapi-exercise/index.ts
  • packages/sdk/js/src/v2/gen/sdk.gen.ts
  • packages/sdk/js/src/v2/gen/types.gen.ts
  • packages/sdk/openapi.json

Previous review (commit c69bd43)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (7 files)
  • packages/kilo-vscode/src/services/notebook/bridge.ts
  • packages/kilo-vscode/src/services/notebook/output.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts
  • packages/opencode/src/kilocode/tool/registry.ts
  • packages/opencode/src/tool/registry.ts
  • packages/opencode/test/server/httpapi-exercise/index.ts

Previous review (commit 479d27f)

Status: No Issues Found | Recommendation: Merge

Files Reviewed (6 files)
  • packages/kilo-vscode/src/services/notebook/bridge.ts
  • packages/kilo-vscode/src/services/notebook/output.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts
  • packages/opencode/src/kilocode/tool/registry.ts
  • packages/opencode/src/tool/registry.ts

Previous review (commit 4d1962f)

Status: 3 Issues Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 1
WARNING 2
SUGGESTION 0

Fix these issues in Kilo Cloud

Issue Details (click to expand)

CRITICAL

File Line Issue
packages/opencode/src/tool/registry.ts 154 Private Notebook.defaultLayer creates a separate notebook service instance, so tool requests and HTTP replies use different pending-request state.

WARNING

File Line Issue
packages/kilo-vscode/src/services/notebook/bridge.ts 235 Caching this.create(directory) before it settles permanently poisons a directory after one transient initialization failure.
packages/kilo-vscode/src/services/notebook/output.ts 18 Truncating raw bytes before UTF-8 decoding can emit replacement characters instead of a valid source/output prefix.
Files Reviewed (30 files)
  • .changeset/native-notebook-tools.md
  • packages/kilo-vscode/src/extension.ts
  • packages/kilo-vscode/src/services/cli-backend/connection-service.ts
  • packages/kilo-vscode/src/services/notebook/adapter.ts
  • packages/kilo-vscode/src/services/notebook/bridge.ts - 1 issue
  • packages/kilo-vscode/src/services/notebook/index.ts
  • packages/kilo-vscode/src/services/notebook/output.ts - 1 issue
  • packages/kilo-vscode/src/services/notebook/path.ts
  • packages/kilo-vscode/src/services/notebook/types.ts
  • packages/kilo-vscode/tests/unit/notebook-bridge.test.ts
  • packages/kilo-vscode/tests/unit/notebook-core.test.ts
  • packages/opencode/src/config/permission.ts
  • packages/opencode/src/effect/app-runtime.ts
  • packages/opencode/src/kilocode/agent/index.ts
  • packages/opencode/src/kilocode/notebook/protocol.ts
  • packages/opencode/src/kilocode/notebook/service.ts
  • packages/opencode/src/kilocode/server/httpapi/groups/kilocode.ts
  • packages/opencode/src/kilocode/server/httpapi/handlers/kilocode.ts
  • packages/opencode/src/kilocode/tool/notebook-host.ts
  • packages/opencode/src/kilocode/tool/registry.ts
  • packages/opencode/src/server/routes/instance/httpapi/server.ts
  • packages/opencode/src/tool/registry.ts - 1 issue
  • packages/opencode/test/kilocode/notebook-service.test.ts
  • packages/opencode/test/kilocode/notebook-tools.test.ts
  • packages/opencode/test/kilocode/tool-registry-indexing-import-failure.test.ts
  • packages/opencode/test/kilocode/tool-registry-indexing.test.ts
  • packages/opencode/test/kilocode/tool-registry-semantic-import-failure.test.ts
  • packages/sdk/js/src/v2/gen/sdk.gen.ts
  • packages/sdk/js/src/v2/gen/types.gen.ts
  • packages/sdk/openapi.json

Reviewed by gpt-5.4-20260305 · Input: 22.2K · Output: 2K · Cached: 30K

Review guidance: REVIEW.md from base branch main

@markijbema markijbema force-pushed the mark/native-notebook-tools branch from c69bd43 to 9d6f010 Compare June 25, 2026 07:38
markijbema

This comment was marked as resolved.

@markijbema

This comment was marked as resolved.

@markijbema

This comment was marked as resolved.

@markijbema

Copy link
Copy Markdown
Contributor Author

Implemented the explicit opt-in requested in #11644 (comment) via 831514e5e7.

experimental.native_notebook_tools now defaults off, is exposed as a toggle in the VS Code Experimental settings tab, and gates both notebook tool registration and notebook permission defaults. The SDK/OpenAPI schema and tests were updated as part of the same atomic commit.

@markijbema

Copy link
Copy Markdown
Contributor Author

Handled all three findings from #11644 (comment):

  • NB-SEC-03: 54afdd0b4a deletes outcomes immediately after successful delivery while retaining failed-delivery outcomes for retry. I did not add a smaller byte-based eviction policy: after this fix only unacknowledged outcomes remain, and evicting a completed edit/execute outcome would permit replaying a mutation. A safe byte cap would need fail-closed mutation tombstones and is disproportionate without evidence that failed deliveries accumulate in practice.
  • NB-HARD-01: 75fe210ef9 canonicalizes live request roots, requires a match against the extension's known directories, and binds admitted request IDs to both session and routing directory. Unknown roots are rejected before an adapter/context is created. The allowlist is intentionally snapshotted at admission rather than checked again after execution: revoking it after an edit/execute side effect but before replying would leave the backend request pending and create replay risk.
  • NB-HARD-02: 409aaf8067 skips source extraction after the aggregate budget is exhausted and uses a bounded TextDocument range while budget remains, with regression coverage for both behaviors.

@markijbema

Copy link
Copy Markdown
Contributor Author

Cloud schema follow-up for experimental.native_notebook_tools: Kilo-Org/cloud#4255 (commit Kilo-Org/cloud@a976385). All cloud CI checks are passing.

Comment thread packages/opencode/src/kilocode/tool/notebook-host.ts Outdated
@imanolmzd-svg imanolmzd-svg merged commit 8d82992 into main Jun 25, 2026
29 of 31 checks passed
@imanolmzd-svg imanolmzd-svg deleted the mark/native-notebook-tools branch June 25, 2026 15:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants