diff --git a/.cursor-plugin/marketplace.json b/.cursor-plugin/marketplace.json index d7d2a96dd..99d6336b6 100644 --- a/.cursor-plugin/marketplace.json +++ b/.cursor-plugin/marketplace.json @@ -687,6 +687,11 @@ "grokbot": "0.49.0", "sand": "0.49.0" } + }, + { + "name": "tensorviz", + "source": "third_party/tensorviz", + "description": "Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview)." } ] } diff --git a/README.md b/README.md index d2ac28d9d..3e7c0cb5f 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,7 @@ Official Cursor plugins for popular developer tools, frameworks, and SaaS produc | `rippling` | [Rippling](third_party/rippling/) | Cursor | Integrations | Look up people, time off, and company policy in Rippling, and file time-off requests and draft hires. | | `onepay` | [OnePay](third_party/onepay/) | Cursor | Integrations | Access your OnePay accounts: balances, transactions, credit, Pay Later, investments, crypto, and rewards. | | `questrade` | [Questrade](third_party/questrade/) | Cursor | Integrations | Read your Questrade portfolio, get live market data, and discuss potential trades. | +| `tensorviz` | [tensorViz](third_party/tensorviz/) | TensorViz | Developer Tools | Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview). | Author values match each plugin’s `plugin.json` `author.name` (Cursor lists `plugins@cursor.com` in the manifest). ## Repository structure diff --git a/third_party/tensorviz/.cursor-plugin/plugin.json b/third_party/tensorviz/.cursor-plugin/plugin.json new file mode 100644 index 000000000..00b252f77 --- /dev/null +++ b/third_party/tensorviz/.cursor-plugin/plugin.json @@ -0,0 +1,31 @@ +{ + "name": "tensorviz", + "displayName": "tensorViz", + "version": "0.3.61", + "description": "Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview).", + "author": { + "name": "TensorViz", + "email": "tensorviz.app@gmail.com" + }, + "homepage": "https://tensorviz.dev", + "repository": "https://github.com/tensorviz-org/tensorviz-plugins", + "license": "MIT", + "logo": "assets/logo.png", + "keywords": [ + "pytorch", + "tensorviz", + "model-graph", + "tensor-shapes", + "machine-learning", + "mcp" + ], + "category": "developer-tools", + "tags": [ + "pytorch", + "visualization", + "debugging", + "mcp" + ], + "skills": "./skills/", + "mcpServers": "./mcp.json" +} diff --git a/third_party/tensorviz/CHANGELOG.md b/third_party/tensorviz/CHANGELOG.md new file mode 100644 index 000000000..f4b30a943 --- /dev/null +++ b/third_party/tensorviz/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +## 0.3.61 + +- Update the submission to the compiled runtime built from current source main + `d4e2865a3c43149907dd06840745eb037d55dffa`. +- Include the current 27-tool host, with `find_computation`, `query_computation`, + and `analyze_computation_change`, and pin its matching runtime checksum. + +## 0.3.60 + +- Submit the existing public tensorViz 0.3.60 integration to the Cursor catalog. +- Include the local MCP launcher, pinned compiled-runtime lock, workflow skill, + logo, license, privacy, terms, support, and Cursor installation guide. +- Target the macOS Apple Silicon / CPython 3.12 CPU preview; marketplace approval + and Cursor client acceptance remain separate. diff --git a/third_party/tensorviz/LICENSE b/third_party/tensorviz/LICENSE new file mode 100644 index 000000000..63a494992 --- /dev/null +++ b/third_party/tensorviz/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 TensorViz contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/third_party/tensorviz/PRIVACY.md b/third_party/tensorviz/PRIVACY.md new file mode 100644 index 000000000..c2ba31b90 --- /dev/null +++ b/third_party/tensorviz/PRIVACY.md @@ -0,0 +1,28 @@ +# Privacy and data handling + +TensorViz's agent plugin runs a local MCP host and Python workers. Discovery reads +model source. Capturing executes the selected model with the selected environment +and example inputs. Approved setup can write recipes and download Python runtimes +or packages from their providers. Imported model code and dependencies can have +their own filesystem and network behavior. + +Graph evidence, source excerpts, paths and errors returned through MCP are visible +to the coding client and can enter its model-provider conversation. The client's +privacy, retention and organization policies apply. Do not provide sensitive models +or data unless those policies permit it. + +The plugin does not operate a TensorViz cloud ingestion service, and its browser +and panel builds exclude TensorViz's hosted authentication and analytics modules. +The browser viewer uses a local connection. Keep private viewer links private. +The tldraw renderer has separate license-validation behavior; trial licenses can +send license-usage information to tldraw. See +[tldraw's licensing and data collection documentation](https://tldraw.dev/community/license). + +Model recipes and captures, local session resources, runtime installations and +permission records can remain on disk. Removing the plugin does not delete model +source, recipes or Python environments. Run the installed plugin's +`scripts/launch.sh --revoke-permission` to revoke TensorViz permission, or disable +the plugin in your coding client. See [installation and removal](docs/installation.md). + +Do not post private model code, credentials, full environment dumps or private +viewer URLs in public issues. See [SUPPORT.md](SUPPORT.md) for reporting problems. diff --git a/third_party/tensorviz/README.md b/third_party/tensorviz/README.md new file mode 100644 index 000000000..c0c631b87 --- /dev/null +++ b/third_party/tensorviz/README.md @@ -0,0 +1,63 @@ +# tensorViz + +Explore local PyTorch model graphs and measured tensor shapes (Apple Silicon preview). + +The plugin connects Cursor to a local tensorViz MCP host and supplies the +`model-workflow` skill. Capture a PyTorch `nn.Module`, inspect the measured input +and output shapes, and refresh the graph after a saved source edit. Use the local +browser graph when the client does not support the embedded Model graph panel. + +## Requirements + +- macOS on Apple Silicon, with CPU capture. +- CPython 3.12 with PyTorch and your model's dependencies, or supported managed + Python setup after permission is granted. +- Network access for the first runtime download and any approved dependency setup. +- Cursor with plugins enabled. Account, organization, and tool permissions apply. + +This compiled preview does not support Windows, Linux, Intel Macs, or other Python +ABIs. CUDA is unverified. VS Code, a separate Node.js installation, a tensorViz +account, and a provider API key are not required by tensorViz. + +## Install and use + +Once approved and listed, open **Customize**, find **tensorViz**, and select +**Install**. Until then, use the [local evaluation instructions](docs/installation.md). +Start a new Agent chat in your model project and ask: + +> Use tensorViz to open my PyTorch model, capture its saved example input, and +> explain the tensor shapes. Show the graph, then refresh it after my saved edit. + +Provide the model file, class, constructor arguments, and example inputs when +needed. Review tensorViz's first-use permission prompt: capture executes your +local model code, and approved setup can install Python and dependencies. +Select a compatible project environment when requested. Saved `tensorviz.toml` +recipes can be reused; model-specific packages and assets may still need setup. + +A successful capture contains measured shapes for the selected input and +execution. A source preview alone does not establish a successful capture. +Graph display and capture are separate results. + +## Runtime and data + +The readable launcher downloads the public **0.3.61** compiled runtime from GitHub +Releases, verifies the SHA-256 digest pinned in `runtime-lock.json`, and caches the +archive for later connections. It checks the archive on every connection and +extracts separate session files. A checksum mismatch stops startup. This directory +contains the integration; the runtime is downloaded separately. + +Graph evidence, source excerpts, and paths returned through MCP enter Cursor and +may enter its model-provider conversation. Recipes, captures, environments, +runtime caches, and permission records stay on the local machine until removed. +Approved Python setup contacts package providers; imported model code can use its +own services. The tldraw renderer's production trial can send license-usage +information to tldraw, excluding canvas content. See [privacy](PRIVACY.md). + +The bundled renderer trial expires **26 December 2026**. Continued renderer use +requires a renewed license and an updated runtime; existing downloads retain +their original embedded key. See [terms](TERMS.md). + +See [installation, updates, and removal](docs/installation.md), +[support](SUPPORT.md), [the public integration repository](https://github.com/tensorviz-org/tensorviz-plugins), +and [tensorviz.dev](https://tensorviz.dev). The integration is [MIT licensed](LICENSE); +runtime components retain their applicable terms and notices. diff --git a/third_party/tensorviz/SUPPORT.md b/third_party/tensorviz/SUPPORT.md new file mode 100644 index 000000000..3d0669ee0 --- /dev/null +++ b/third_party/tensorviz/SUPPORT.md @@ -0,0 +1,17 @@ +# Support and compatibility + +This compiled candidate targets macOS Apple Silicon and CPython 3.12 CPU capture. +It does not require VS Code or Node.js. Explicitly selected incompatible Python +versions produce an error; TensorViz does not silently replace that environment. +Windows, Linux, Intel Macs, CUDA and other Python ABIs remain unverified targets. + +The integration works with clients that support its local MCP transport and +plugin format. Directory publication is distinct from local installation, capture +and rendering. No official marketplace acceptance is claimed for this candidate. + +When reporting a problem, include the integration version, OS/client version, +whether it failed during download, startup or capture, and a small synthetic +model. Do not share credentials, private viewer links, model secrets or unredacted +environment dumps. Use +[the integration repository's issues](https://github.com/tensorviz-org/tensorviz-plugins/issues) +for public, non-sensitive bug reports. diff --git a/third_party/tensorviz/TERMS.md b/third_party/tensorviz/TERMS.md new file mode 100644 index 000000000..ff2ab6b26 --- /dev/null +++ b/third_party/tensorviz/TERMS.md @@ -0,0 +1,22 @@ +# Terms and third-party components + +The integration files in this repository carry the accompanying MIT license. +The core runtime is distributed separately as compiled artifacts; this repository +does not publish its source or change the licensing of existing core code. +Runtime distribution terms and third-party notices must accompany its release. + +Public runtime releases require the owner's confirmation that the tldraw license +covers the bundled renderer supplied to end users. Private build candidates are +not permission to redistribute the renderer. The integration's MIT license does not +grant a tldraw production or redistribution license. Dependencies retain their +original licenses and the binary includes their applicable notices. + +The initial preview uses a production trial of tldraw that expires on +26 December 2026. Continued renderer use after the trial requires a renewed license +and an updated TensorViz runtime. Downloaded versions retain their embedded key; +renewal does not retroactively update old installations. + +Your coding client, model provider, downloaded packages and model repositories +have their own terms. Capturing runs selected model code locally. A graph records +one selected execution or an explicitly identified source preview; it does not +guarantee model correctness or behavior for other inputs. diff --git a/third_party/tensorviz/assets/logo.png b/third_party/tensorviz/assets/logo.png new file mode 100644 index 000000000..14de08be7 Binary files /dev/null and b/third_party/tensorviz/assets/logo.png differ diff --git a/third_party/tensorviz/docs/installation.md b/third_party/tensorviz/docs/installation.md new file mode 100644 index 000000000..b06af7f58 --- /dev/null +++ b/third_party/tensorviz/docs/installation.md @@ -0,0 +1,82 @@ +# Cursor installation and maintenance + +This entry packages the public +[tensorViz 0.3.61 preview](https://github.com/tensorviz-org/tensorviz-plugins/releases/tag/v0.3.61) +for Cursor. It requires macOS Apple Silicon and CPython 3.12 CPU capture. Local +installation, package validation, runtime checks, and marketplace approval are +separate results. This submission does not claim completed Cursor client +acceptance or an approved marketplace listing. + +## Local evaluation + +1. Copy this complete `third_party/tensorviz` directory to + `~/.cursor/plugins/local/tensorviz`. The destination must directly contain + `.cursor-plugin/plugin.json`, `mcp.json`, `runtime-lock.json`, `scripts/`, + `skills/`, and `assets/`. Copy regular files rather than a symlink. +2. Restart Cursor or run **Developer: Reload Window**. +3. Open **Customize** and confirm the `model-workflow` skill and tensorViz MCP + server. Your account or organization must allow local plugin imports. A + marketplace installation of the same name takes precedence over a local copy. +4. Start a new Agent chat in your model project and use the prompt in the + [README](../README.md). Complete the permission and environment prompts. + +The MCP configuration uses `${CURSOR_PLUGIN_ROOT}/scripts/launch.sh`. Cursor +expands that variable to this plugin's installed directory. No Node.js command +or global Python executable is used to start the compiled host. + +## Updates, removal, and troubleshooting + +For marketplace installations, use Cursor's plugin management to update, disable, +or uninstall tensorViz. Start a new chat after an update; the runtime remains +pinned to this entry's version until its lock and integration are updated together. + +For a local evaluation update, close tensorViz chats, move the old complete plugin +directory outside `~/.cursor/plugins/local`, and copy the new complete directory +into place. Reload Cursor and start a new chat. Restore the old complete directory +for rollback; do not combine files from different versions. + +If download fails, check access to the URL in `runtime-lock.json` and reconnect. +The verified archive is cached under `~/Library/Caches/dev.tensorviz/runtime`. +A checksum error names the damaged archive: remove only that archive and +reconnect to download it again. Do not bypass checksum verification. + +To remove a local evaluation, close its chats, remove only +`~/.cursor/plugins/local/tensorviz`, and reload Cursor. Removal preserves model +source, recipes, Python environments, cached runtimes, and saved permission. +Before removal, run the installed plugin's `scripts/launch.sh --revoke-permission` +if you want to revoke tensorViz permission. See [privacy](../PRIVACY.md). + +## Provenance and review scope + +The launcher, runtime lock, workflow skill, logo, support, and terms were copied +from public tag `v0.3.61`, commit +`d01630d9e9d6e453b1ef6f7786b7dd77b2601bed` of +[`tensorviz-org/tensorviz-plugins`](https://github.com/tensorviz-org/tensorviz-plugins/tree/v0.3.61/cursor/plugins/tensorviz). +Their hashes were checked against that release's `PUBLICATION.json`. The MIT +license is copied from the distribution repository. The privacy document changes +only its installation link to this guide. + +The Cursor manifest uses this marketplace's supported author fields, adds display +and discovery metadata, and keeps the release version and component paths. This +entry also adds the catalog registration, README, changelog, and this guide. It +does not include the other clients' manifests or a compiled runtime archive. + +Local submission checks on 3 November 2026 passed the repository's +`node scripts/validate-plugins.mjs` validator, launcher shell syntax, catalog and +manifest consistency, documentation links, and copied-file hash checks. An +isolated macOS Apple Silicon profile launched the configured MCP command from a +path containing spaces, downloaded the runtime without GitHub credentials, and +verified its 35,773,473-byte archive against the pinned SHA-256 digest. MCP +initialization reported tensorViz 0.3.61 and discovery returned 27 tools, including +`open_graph`, `open_graph_view`, `find_computation`, `query_computation`, and +`analyze_computation_change`. All three computation queries returned `NO_MODEL` +for an unopened model without creating user state. No model ran and no tensorViz +permission was granted. These checks did not run the Cursor application. + +For client acceptance, verify skill/tool discovery, a small CPU model capture, +measured shapes, visible graph display, refresh after an edit, and an update with +retained setup. A manifest check or a direct MCP connection alone cannot establish +those Cursor behaviors. + +References: [Cursor plugin format and MCP paths](https://cursor.com/docs/reference/plugins), +[local plugin imports](https://cursor.com/docs/plugins#test-plugins-locally). diff --git a/third_party/tensorviz/mcp.json b/third_party/tensorviz/mcp.json new file mode 100644 index 000000000..f25140e4f --- /dev/null +++ b/third_party/tensorviz/mcp.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json", + "mcpServers": { + "tensorviz": { + "type": "stdio", + "command": "sh", + "args": [ + "${CURSOR_PLUGIN_ROOT}/scripts/launch.sh" + ] + } + } +} diff --git a/third_party/tensorviz/runtime-lock.json b/third_party/tensorviz/runtime-lock.json new file mode 100644 index 000000000..2637e54d3 --- /dev/null +++ b/third_party/tensorviz/runtime-lock.json @@ -0,0 +1,9 @@ +{ + "formatVersion": 1, + "version": "0.3.61", + "platform": "darwin-arm64", + "pythonABI": "cpython-312-darwin", + "sha256": "c6d4a606f45d880ed2967a16059a9130cfc46111e913d91dc808c7ac32341430", + "bytes": 35773473, + "url": "https://github.com/tensorviz-org/tensorviz-plugins/releases/download/v0.3.61/tensorviz-runtime-0.3.61-darwin-arm64.tar.gz" +} diff --git a/third_party/tensorviz/scripts/launch.sh b/third_party/tensorviz/scripts/launch.sh new file mode 100755 index 000000000..208871b5a --- /dev/null +++ b/third_party/tensorviz/scripts/launch.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# Public integration only. Core code arrives as a version-pinned binary archive. +set -eu +umask 077 +fail() { echo "TensorViz: $*" >&2; exit 1; } +plugin=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd -P) +if [ "$(uname -s)-$(uname -m)" != Darwin-arm64 ]; then + fail 'This preview supports macOS Apple Silicon. No runtime was downloaded.' +fi +lock="$plugin/runtime-lock.json" +version=$(/usr/bin/plutil -extract version raw -o - "$lock") +sha=$(/usr/bin/plutil -extract sha256 raw -o - "$lock") +url=$(/usr/bin/plutil -extract url raw -o - "$lock") +bytes=$(/usr/bin/plutil -extract bytes raw -o - "$lock") +case "$sha" in *[!a-f0-9]*|'') fail 'Invalid runtime digest.';; esac +[ "${#sha}" -eq 64 ] || fail 'Invalid runtime digest.' +case "$bytes" in *[!0-9]*|'') fail 'Invalid runtime size.';; esac +case "$url" in https://*) ;; *) fail 'Runtime downloads require HTTPS.';; esac +cache="${HOME:?}/Library/Caches/dev.tensorviz/runtime" +mkdir -p "$cache" +[ ! -L "$cache" ] || fail 'The runtime cache must not be a symbolic link.' +archive="$cache/$sha.tar.gz" +download='' +session='' +child='' +cleanup() { + if [ -n "$child" ]; then kill "$child" 2>/dev/null || true; wait "$child" 2>/dev/null || true; fi + [ -z "$download" ] || rm -f -- "$download" + [ -z "$session" ] || rm -rf -- "$session" +} +trap cleanup 0 +trap 'exit 130' INT +trap 'exit 143' TERM HUP +if [ ! -f "$archive" ]; then + download=$(mktemp "$cache/.download.XXXXXX") + echo "TensorViz: downloading runtime $version for reuse by later connections." >&2 + /usr/bin/curl --fail --silent --show-error --location --proto '=https' --proto-redir '=https' \ + --connect-timeout 15 --max-time 300 --max-filesize "$bytes" --output "$download" "$url" < /dev/null & + child=$! + wait "$child" || fail 'Runtime download failed. Retry the plugin connection.' + child='' + [ "$(/usr/bin/shasum -a 256 "$download" | cut -d ' ' -f 1)" = "$sha" ] \ + || fail 'Runtime checksum mismatch. Nothing was executed.' + mv -f -- "$download" "$archive" + download='' +fi +[ ! -L "$archive" ] || fail 'The cached archive must not be a symbolic link.' +[ "$(/usr/bin/shasum -a 256 "$archive" | cut -d ' ' -f 1)" = "$sha" ] \ + || fail "Cached runtime is damaged. Remove $archive and reconnect. Nothing was executed." +# Extract anew from the verified archive, so modified unpacked caches cannot run. +session=$(mktemp -d "${TMPDIR:-/tmp}/tensorviz-native.XXXXXX") +/usr/bin/tar -xzf "$archive" -C "$session" +[ -x "$session/tensorviz-host" ] || fail 'Runtime archive has no executable host.' +"$session/tensorviz-host" "$@" <&0 & +child=$! +set +e +wait "$child" +status=$? +child='' +exit "$status" diff --git a/third_party/tensorviz/skills/model-workflow/SKILL.md b/third_party/tensorviz/skills/model-workflow/SKILL.md new file mode 100644 index 000000000..5d53dc1f3 --- /dev/null +++ b/third_party/tensorviz/skills/model-workflow/SKILL.md @@ -0,0 +1,68 @@ +--- +name: model-workflow +description: Create, understand, modify or debug local PyTorch nn.Module models with a current TensorViz graph. Use for local model architecture, forward-pass tensor flow, shape errors and activation or layer changes. Exclude unrelated Python work, conceptual questions without local code and requests to avoid graphing or execution. +--- + +# TensorViz model workflow + +Read the user's request first. Do not run anything on startup. Explicit opt-outs, +read-only instructions and the client's native execution/edit approvals take +priority. Work only on projects relevant to the user's request. + +Discover the advertised TensorViz tools and host capabilities once. Use the exact +workspace checkout, model file and class from the current task. Do not infer a +workspace from the launcher's directory or silently use another worktree. + +Use `open_graph` when advertised. It waits briefly for completion and yields early +for permission or setup. Poll the same requestId only while it remains pending; +never start duplicate captures or sleep repeatedly in the agent. Continue its returned next action until a +current capture succeeds, a model failure has evidence, the user cancels, or a +concrete blocker requires their input. Inspect repository evidence for missing +setup; ask about unresolved domain choices or assets. A source preview, connected +server or tool call is not a successful capture. Do not change inputs to hide a +model failure or retry an unchanged failed action. + +Use the environment reported by tensorViz. The tensorViz plugin remembers the +saved/project environment and offers available previously used interpreters when +there is no project choice. Start without `managedRuntime`; select an offered +interpreter when the user or project identifies it. Do not search arbitrary +directories or guess shell Python. With no available choices on a supported +platform, the host prepares a managed environment under its existing permission. +An explicit `managedRuntime: true` requests a separate environment. +The tensorViz plugin remembers the +user's plugin permission from installation or first use. Once granted, continue +inspection, setup, dependency repair and capture without asking for additional +TensorViz approvals. Honor a declined or revoked permission. Never approve a +permission prompt, invoke the permission helper, edit permission records, change +client permission settings or send an invented approval flag on the user's behalf. +If the user explicitly asks to enable TensorViz after a declined or cancelled +decision, use the stopped opening's `request_permission` recovery action. It +shows the user's confirmation and resumes the same opening after acceptance; +it does not grant permission itself. Never repeat it automatically after a decline. +If the project defines example inputs in a Python function such as `graph_inputs`, +reference that exact function with `inputs: { factory: { file, callable, kwargs } }` +in the setup draft. Read its source first; do not guess a function or manually +serialize its tensors. It must return named forward inputs or an explicit +`{args, kwargs}` binding. TensorViz executes it once in the capture worker. +Keep saved inputs +and recapture after a coherent source change, not after every file write. + +In clients supporting MCP Apps, use `open_graph_panel` when advertised to show +the native Model graph panel beside this chat. Open it once; it follows the current +capture. Check `list_models` for a connected current view before claiming display, +and use that viewId for `get_selection` and `focus_view`. Do not call the panel's +app-only transport tools. The panel opening alone does not prove rendering. + +For clients without MCP Apps, use `open_graph_view`: open the returned private +URL once in a browser and poll its handoff for the exact display receipt. Display +failure is separate from capture failure. Keep private links out of logs and +external messages. + +For plugin hosts, ordinary source edits use the coding agent's normal review +workflow. Use TensorViz source proposals only when the host advertises and supports +the complete review path. Never bypass a pending proposal. Use graph comparison +only when advertised; focusing a changed node does not show a diff. + +Finish with the graph result, the model result and any evidenced limitation. If +the installed host lacks a required capability, name it accurately rather than +claiming completion or routing to a different host.