From 4cda36c860e0a1a111525c63ae69851dc1506ef9 Mon Sep 17 00:00:00 2001 From: Erosika Date: Tue, 17 Mar 2026 15:18:32 -0400 Subject: [PATCH 01/12] Add SillyTavern integration docs New integration guide for the sillytavern-honcho extension covering install, global config, context architecture, enrichment modes, and troubleshooting. Added to v3 integrations nav. --- docs/docs.json | 3 +- docs/v3/guides/integrations/sillytavern.mdx | 177 ++++++++++++++++++++ 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 docs/v3/guides/integrations/sillytavern.mdx diff --git a/docs/docs.json b/docs/docs.json index 27f6b633..39b675be 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -97,7 +97,8 @@ "v3/guides/integrations/langgraph", "v3/guides/integrations/mcp", "v3/guides/integrations/n8n", - "v3/guides/integrations/openclaw" + "v3/guides/integrations/openclaw", + "v3/guides/integrations/sillytavern" ] }, { diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx new file mode 100644 index 00000000..ce418907 --- /dev/null +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -0,0 +1,177 @@ +--- +title: "SillyTavern" +icon: 'comments' +description: "Add persistent, personalized memory to SillyTavern AI characters with Honcho" +sidebarTitle: 'SillyTavern' +--- + +Give your SillyTavern characters long-term memory. Honcho remembers who you are, what you've talked about, and how to talk to you -- across sessions, characters, and restarts. + +The extension has two parts: a **client extension** (browser) that hooks into SillyTavern events, and a **server plugin** (Node.js) that proxies requests to the Honcho API. + +## Quick Start + +### Step 1: Get Your Honcho API Key + +1. Go to **[app.honcho.dev](https://app.honcho.dev)** +2. Sign up or log in +3. Copy your API key + +### Step 2: Install + +From your **SillyTavern directory**: + +**macOS / Linux:** +```bash +bash <(curl -s https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/install.sh) +``` + +**Windows (PowerShell):** +```powershell +irm https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/install.ps1 | iex +``` + + +Server plugins must be enabled. The installer checks for this, but if you haven't already, add `enableServerPlugins: true` to your `config.yaml`. + + +The installer: +1. Clones the extension into `public/scripts/extensions/third-party/sillytavern-honcho` +2. Symlinks the server plugin to `plugins/honcho-proxy` +3. Installs the `@honcho-ai/sdk` dependency +4. Detects your `~/.honcho/config.json` if it exists + +### Step 3: Restart SillyTavern + +Stop and restart SillyTavern so the server plugin loads. + +### Step 4: Configure + +Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: + +1. Check **Enable Honcho Memory** +2. Click the API key field to set your key +3. Enter your workspace ID +4. Status indicator should show **Ready** + +## Global Config (Multi-Tool Setups) + +If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension auto-populates settings from `~/.honcho/config.json`: + +```json +{ + "apiKey": "your-honcho-api-key", + "peerName": "your-name", + "workspace": "sillytavern", + "enabled": true +} +``` + +Config reads fall back from `hosts.sillytavern` to root-level globals. Writes are always scoped to `hosts.sillytavern` -- the extension never mutates settings for other tools. + +```jsonc +{ + "apiKey": "hch-v2-...", + "peerName": "alice", + "hosts": { + "sillytavern": { + "workspace": "sillytavern", + "aiPeer": "Assistant" // Updated automatically per character + }, + "claude_code": { "..." : "..." }, + "cursor": { "..." : "..." } + } +} +``` + +## How It Works + +### Context Architecture + +Every generation injects a **base context layer** from `session.context()` -- the peer representation (what Honcho knows about you) and session summary. This uses stale-while-revalidate caching: the first turn blocks to populate the cache, then every subsequent turn serves the cached result instantly while refreshing in the background. + +The **enrichment mode** controls what layers on top of the base context: + +| Mode | Behavior | +| --- | --- | +| **Context only** | Base layer only -- peer representation + session summary | +| **Reasoning** (default) | Base layer + dialectic `peer.chat()` queries on a configurable interval | +| **Tool call** | Base layer + function tools the LLM can call on demand | + +Both the context and reasoning layers use stale-while-revalidate with configurable refresh intervals. After the first turn of a session, there is zero added latency. + +### Tool Call Mode + +In tool call mode, the extension registers three function tools that the LLM can invoke: + +| Tool | Description | +| --- | --- | +| `honcho_query_memory` | Dialectic chat query -- ask Honcho what it knows | +| `honcho_save_observation` | Save an insight about the user to memory | +| `honcho_search_history` | Semantic search across session messages | + +This mode works best with models that support function calling. The LLM decides when to query memory rather than firing on every turn. + +### Peer Modes + +| Mode | Behavior | +| --- | --- | +| **Single peer** | One user peer shared across all characters | +| **Per-persona** | Each character gets its own isolated memory | + +### Session Naming + +| Mode | Behavior | +| --- | --- | +| **Auto** | Per-chat hash (unique per conversation) | +| **Per-character** | One session per character (persistent) | +| **Custom** | User-defined session name | + +### Event Flow + +| SillyTavern Event | Action | +| --- | --- | +| Chat opened | Creates or retrieves Honcho session + peers | +| Before generation | Injects memory context into the prompt | +| User sends message | Stores message in Honcho session | +| AI responds | Stores response in Honcho session | + +## Architecture + +``` +Browser (Client Extension) Server (Plugin) ++-----------------------+ +------------------------------+ +| index.js | fetch() | plugin/index.js | +| | ------------> | | +| - Settings UI | /api/plugins/ | - Express router (7 routes) | +| - Event hooks | honcho-proxy | - Honcho SDK (@honcho-ai/sdk)| +| - Prompt injection | | - API key from ST secrets or | +| - Tool registration | | ~/.honcho/config.json | ++-----------------------+ +------------------------------+ +``` + +The server plugin reads API credentials from SillyTavern's secrets store first, falling back to `~/.honcho/config.json`. It re-reads the global config before every write to prevent race conditions with concurrent tools. + +## Troubleshooting + +| Symptom | Fix | +| --- | --- | +| No "Honcho Memory" in Extensions | Check symlink exists: `ls public/scripts/extensions/third-party/sillytavern-honcho/manifest.json` | +| Plugin not initializing | Ensure `enableServerPlugins: true` in `config.yaml`, then restart ST | +| 403 on plugin requests | Set Honcho API key in extension settings or `~/.honcho/config.json` | +| SDK import error | Run `cd plugins/honcho-proxy && npm install` | +| Extension loads but nothing happens | Enable the checkbox and ensure workspace ID is set | + +--- + +## Next Steps + + + + Source code, issues, and install scripts. + + + + Learn about peers, sessions, and dialectic reasoning. + + From 1e7a3461e5e83df9fe4825bf0457a47c57ae13fe Mon Sep 17 00:00:00 2001 From: lilyplasticlabs Date: Tue, 21 Apr 2026 14:56:06 -0400 Subject: [PATCH 02/12] docs(sillytavern): apply DEV-1482 review findings (DEV-1430) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Applies eight review findings from the DEV-1482 integration review. All scoped to docs/v3/guides/integrations/sillytavern.mdx; no code changes. - DOC-3: curl -fsSL in install command (fails loud on 4xx/5xx) - DOC-4: Note now reflects installer auto-config + manual-fallback - DOC-6: LLM-backend prerequisite callout at top of Quick Start - DOC-14: restart step warns about live-session clobbering - DOC-5: Global Config intro names resolution order + precedence; disambiguates "sillytavern" workspace vs hosts.sillytavern key - DOC-7: new Peer Observability subsection (asymmetric default) - DOC-2: route count in Architecture diagram 7 → 9 - DOC-8: troubleshooting row for "plugin on disk, drawer absent" Findings index + rationale: plastic-labs/sillytavern-honcho#3 --- docs/v3/guides/integrations/sillytavern.mdx | 27 ++++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index ce418907..a25f7bc9 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -11,6 +11,10 @@ The extension has two parts: a **client extension** (browser) that hooks into Si ## Quick Start + +Honcho stores memory; it doesn't generate text. You'll also need an LLM backend (OpenAI, Claude, OpenRouter, local llama.cpp, etc.) connected via SillyTavern's plug icon in the top nav. Configure that separately before expecting replies in chat. + + ### Step 1: Get Your Honcho API Key 1. Go to **[app.honcho.dev](https://app.honcho.dev)** @@ -23,7 +27,7 @@ From your **SillyTavern directory**: **macOS / Linux:** ```bash -bash <(curl -s https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/install.sh) +bash <(curl -fsSL https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/install.sh) ``` **Windows (PowerShell):** @@ -32,7 +36,7 @@ irm https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/insta ``` -Server plugins must be enabled. The installer checks for this, but if you haven't already, add `enableServerPlugins: true` to your `config.yaml`. +Server plugins must be enabled for the Honcho plugin to load. The installer configures this automatically on fresh checkouts; if you skipped the installer or started SillyTavern before running it, manually set `enableServerPlugins: true` in `config.yaml` and restart. The installer: @@ -43,7 +47,7 @@ The installer: ### Step 3: Restart SillyTavern -Stop and restart SillyTavern so the server plugin loads. +Stop and restart SillyTavern so the server plugin loads. If you have in-progress chats open, save them first — the running session ends when you stop the server. ### Step 4: Configure @@ -56,7 +60,11 @@ Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: ## Global Config (Multi-Tool Setups) -If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension auto-populates settings from `~/.honcho/config.json`: +If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension reads from `~/.honcho/config.json` on startup when resolvable keys are present. Resolution order: `hosts.sillytavern.apiKey` → root-level `apiKey` → fall through to the Extensions-panel key if neither resolves. The Extensions-panel key (SillyTavern's secret manager) takes priority at request time, so entering one in the UI overrides the config file without touching it. + +Note that "sillytavern" appears in two namespaces here: as the Honcho workspace ID (a Honcho concept — what you see in the dashboard) and as the `hosts.sillytavern` host key in the config file (a local convention for which tool's settings are which). + +Flat form: ```json { @@ -67,7 +75,9 @@ If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the ex } ``` -Config reads fall back from `hosts.sillytavern` to root-level globals. Writes are always scoped to `hosts.sillytavern` -- the extension never mutates settings for other tools. +Writes are always scoped to `hosts.sillytavern` — the extension never mutates settings for other tools. + +Nested form (when multiple tools share the file): ```jsonc { @@ -112,6 +122,10 @@ In tool call mode, the extension registers three function tools that the LLM can This mode works best with models that support function calling. The LLM decides when to query memory rather than firing on every turn. +### Peer Observability + +By default, only the user peer accumulates derived memory — Honcho observes the user's messages and derives conclusions across sessions. The AI character's persona comes from its character card, not from peer derivation. If you want the character to have its own Honcho-derived state, configure it as an additional peer in session setup. + ### Peer Modes | Mode | Behavior | @@ -143,7 +157,7 @@ Browser (Client Extension) Server (Plugin) +-----------------------+ +------------------------------+ | index.js | fetch() | plugin/index.js | | | ------------> | | -| - Settings UI | /api/plugins/ | - Express router (7 routes) | +| - Settings UI | /api/plugins/ | - Express router (9 routes) | | - Event hooks | honcho-proxy | - Honcho SDK (@honcho-ai/sdk)| | - Prompt injection | | - API key from ST secrets or | | - Tool registration | | ~/.honcho/config.json | @@ -161,6 +175,7 @@ The server plugin reads API credentials from SillyTavern's secrets store first, | 403 on plugin requests | Set Honcho API key in extension settings or `~/.honcho/config.json` | | SDK import error | Run `cd plugins/honcho-proxy && npm install` | | Extension loads but nothing happens | Enable the checkbox and ensure workspace ID is set | +| Plugin on disk but "Honcho Memory" drawer doesn't appear at all | Set `enableServerPlugins: true` in `config.yaml`; the panel can't show plugins the server never loaded | --- From 2ffe30bd4f954ccecb21e2a894b95d78ebba41cb Mon Sep 17 00:00:00 2001 From: Erosika Date: Tue, 21 Apr 2026 18:17:17 -0400 Subject: [PATCH 03/12] docs(sillytavern): post-review polish pass (DEV-1430) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Clarify installer step 4 — the plugin seeds config.json if absent - 'Puzzle piece' -> 'three-cubes' for the Extensions icon (current ST UI) - API key step notes the UI-overrides-config precedence explicitly - 'Honcho workspace ID' -> 'default Honcho workspace ID (configurable)' - Add Note after Context-modes table — Context only is session-scoped and returns empty until enough messages accumulate; Reasoning is the better default for fresh peers - Next Steps gains two cards: Install SillyTavern (upstream docs) and the Claude Code setup skill (skills/setup/SKILL.md) Follow-ups tracked separately — tool rename (observation -> conclusion, matching the /conclusion endpoint), architecture Excalidraw. --- docs/v3/guides/integrations/sillytavern.mdx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index a25f7bc9..d87b3226 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -43,7 +43,7 @@ The installer: 1. Clones the extension into `public/scripts/extensions/third-party/sillytavern-honcho` 2. Symlinks the server plugin to `plugins/honcho-proxy` 3. Installs the `@honcho-ai/sdk` dependency -4. Detects your `~/.honcho/config.json` if it exists +4. Detects your `~/.honcho/config.json` if it exists (if not, the plugin seeds a minimal one on first run) ### Step 3: Restart SillyTavern @@ -51,10 +51,10 @@ Stop and restart SillyTavern so the server plugin loads. If you have in-progress ### Step 4: Configure -Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: +Open **Extensions** (three-cubes icon, top-right) and expand **Honcho Memory**: 1. Check **Enable Honcho Memory** -2. Click the API key field to set your key +2. Click the API key field to set your key (if auto-detected from `~/.honcho/config.json`, you can still enter one here to override) 3. Enter your workspace ID 4. Status indicator should show **Ready** @@ -62,7 +62,7 @@ Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension reads from `~/.honcho/config.json` on startup when resolvable keys are present. Resolution order: `hosts.sillytavern.apiKey` → root-level `apiKey` → fall through to the Extensions-panel key if neither resolves. The Extensions-panel key (SillyTavern's secret manager) takes priority at request time, so entering one in the UI overrides the config file without touching it. -Note that "sillytavern" appears in two namespaces here: as the Honcho workspace ID (a Honcho concept — what you see in the dashboard) and as the `hosts.sillytavern` host key in the config file (a local convention for which tool's settings are which). +Note that "sillytavern" appears in two namespaces here: as the default Honcho workspace ID (a Honcho concept — what you see in the dashboard; configurable) and as the `hosts.sillytavern` host key in the config file (a local convention for which tool's settings are which). Flat form: @@ -110,6 +110,10 @@ The **enrichment mode** controls what layers on top of the base context: Both the context and reasoning layers use stale-while-revalidate with configurable refresh intervals. After the first turn of a session, there is zero added latency. + +**Context only** mode relies on `session.context()`, which is session-scoped — it returns empty output until the session has enough messages for Honcho to derive a representation and summary. For fresh sessions or peers with little history, Reasoning mode is a better default: it queries `peer.chat()` across all of the peer's history, not just the current session. + + ### Tool Call Mode In tool call mode, the extension registers three function tools that the LLM can invoke: @@ -182,6 +186,14 @@ The server plugin reads API credentials from SillyTavern's secrets store first, ## Next Steps + + New to SillyTavern? Start here — install guide for macOS, Linux, Windows, Docker. + + + + Agent-assisted install — idempotent, structural patches, end-to-end verification. + + Source code, issues, and install scripts. From d8d625f4709efc5433914ec26336004029c18c53 Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 12:43:49 -0400 Subject: [PATCH 04/12] docs(sillytavern): update for PR#10 surface + review fixes - Add Prerequisites section with SillyTavern install link + Node >= 18 requirement (was buried in Next Steps; users hit install step with no awareness ST needed to exist first). - Expand restart step into a callout: restart required for server-plugin reload, not for client-side edits. - Configure step now documents the three editable inputs (API key, Workspace ID, Your peer name) and where each saves. - Fix 'three-cubes icon' -> 'puzzle piece icon'. - Installer step list fleshed out: 6 steps (was 4), including config.yaml bootstrap and enableServerPlugins flip. Dropped the false claim that the plugin seeds a minimal ~/.honcho/config.json on first run. - Global Config section rewritten: resolution order now generalized to apiKey / workspace / peerName (was apiKey-only); documents panel write-back to hosts.sillytavern.*; dropped aiPeer references (it's a telemetry-only field, not user-facing). - Add a Disable / Enable global config subsection covering the opt-out toggle and the Inherit / Push local / Cancel diff dialog. - Troubleshooting: two new rows (stale peer name on new chat, cancelled diff dialog). --- docs/v3/guides/integrations/sillytavern.mdx | 78 ++++++++++++--------- 1 file changed, 46 insertions(+), 32 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index d87b3226..5097a1a1 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -9,19 +9,15 @@ Give your SillyTavern characters long-term memory. Honcho remembers who you are, The extension has two parts: a **client extension** (browser) that hooks into SillyTavern events, and a **server plugin** (Node.js) that proxies requests to the Honcho API. +## Prerequisites + +- **SillyTavern running locally** (Node ≥ 18). New to it? See the [SillyTavern installation docs](https://docs.sillytavern.app/installation/). +- A **Honcho API key** from [app.honcho.dev](https://app.honcho.dev). +- An **LLM backend** (OpenAI, Claude, OpenRouter, local llama.cpp, etc.) connected via SillyTavern's plug icon in the top nav. Honcho stores memory; it doesn't generate text. + ## Quick Start - -Honcho stores memory; it doesn't generate text. You'll also need an LLM backend (OpenAI, Claude, OpenRouter, local llama.cpp, etc.) connected via SillyTavern's plug icon in the top nav. Configure that separately before expecting replies in chat. - - -### Step 1: Get Your Honcho API Key - -1. Go to **[app.honcho.dev](https://app.honcho.dev)** -2. Sign up or log in -3. Copy your API key - -### Step 2: Install +### Step 1: Install From your **SillyTavern directory**: @@ -35,36 +31,43 @@ bash <(curl -fsSL https://raw.githubusercontent.com/plastic-labs/sillytavern-hon irm https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/install.ps1 | iex ``` - -Server plugins must be enabled for the Honcho plugin to load. The installer configures this automatically on fresh checkouts; if you skipped the installer or started SillyTavern before running it, manually set `enableServerPlugins: true` in `config.yaml` and restart. - - The installer: 1. Clones the extension into `public/scripts/extensions/third-party/sillytavern-honcho` 2. Symlinks the server plugin to `plugins/honcho-proxy` 3. Installs the `@honcho-ai/sdk` dependency -4. Detects your `~/.honcho/config.json` if it exists (if not, the plugin seeds a minimal one on first run) +4. Bootstraps `config.yaml` if it doesn't exist (briefly runs `npm start` to generate defaults) +5. Sets `enableServerPlugins: true` in `config.yaml` +6. Detects your `~/.honcho/config.json` if it exists -### Step 3: Restart SillyTavern +### Step 2: Restart SillyTavern -Stop and restart SillyTavern so the server plugin loads. If you have in-progress chats open, save them first — the running session ends when you stop the server. + +**Restart is required.** SillyTavern loads server plugins at startup only. After running `install.sh`, stop SillyTavern (⌃C) and start it again. You'll need to restart again whenever `plugin/index.js` changes. Client-side (browser) updates pick up on a hard refresh — no restart needed for those. + -### Step 4: Configure +### Step 3: Configure -Open **Extensions** (three-cubes icon, top-right) and expand **Honcho Memory**: +Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: 1. Check **Enable Honcho Memory** -2. Click the API key field to set your key (if auto-detected from `~/.honcho/config.json`, you can still enter one here to override) -3. Enter your workspace ID -4. Status indicator should show **Ready** +2. Click the API key field to set your key (auto-populated if present in `~/.honcho/config.json`; the UI value overrides the file) +3. Enter your **Workspace ID** (saves to `hosts.sillytavern.workspace`) +4. Enter **Your peer name** (saves to `hosts.sillytavern.peerName`; auto-synced from your SillyTavern persona on first boot) +5. Status indicator should show **Ready** ## Global Config (Multi-Tool Setups) -If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension reads from `~/.honcho/config.json` on startup when resolvable keys are present. Resolution order: `hosts.sillytavern.apiKey` → root-level `apiKey` → fall through to the Extensions-panel key if neither resolves. The Extensions-panel key (SillyTavern's secret manager) takes priority at request time, so entering one in the UI overrides the config file without touching it. +If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension reads from `~/.honcho/config.json` on startup. -Note that "sillytavern" appears in two namespaces here: as the default Honcho workspace ID (a Honcho concept — what you see in the dashboard; configurable) and as the `hosts.sillytavern` host key in the config file (a local convention for which tool's settings are which). +**Resolution order** for `apiKey`, `workspace`, and `peerName`: -Flat form: +1. `hosts.sillytavern.` (host-specific override) +2. Root-level `` (shared default across tools) +3. For `apiKey` only: fall through to the Extensions-panel key (SillyTavern's secret manager), which takes priority at request time — entering one in the UI overrides the file without touching it. + +**Writes** are always scoped to `hosts.sillytavern` — the extension never mutates settings for other tools. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. + +Flat form (single-tool setup): ```json { @@ -75,25 +78,34 @@ Flat form: } ``` -Writes are always scoped to `hosts.sillytavern` — the extension never mutates settings for other tools. - -Nested form (when multiple tools share the file): +Nested form (multiple tools sharing the file): ```jsonc { "apiKey": "hch-v2-...", "peerName": "alice", + "workspace": "default", "hosts": { "sillytavern": { "workspace": "sillytavern", - "aiPeer": "Assistant" // Updated automatically per character + "peerName": "alice-rp" }, - "claude_code": { "..." : "..." }, - "cursor": { "..." : "..." } + "claude_code": { "...": "..." }, + "cursor": { "...": "..." } } } ``` +### Disable / Enable global config + +A toggle button in the panel opts out of auto-detection entirely. When disabled, the extension skips the config fetch on load, hides the source line, and saves peer-name edits to the local SillyTavern extension settings instead of the global file. Re-enabling opens a diff-aware dialog if local and global values diverge, offering: + +- **Inherit** — pull global values into this SillyTavern install +- **Push local** — overwrite the global host entry with your local values +- **Cancel** — leave both untouched + +Empty local values are never pushed, so a blank field cannot accidentally delete a host key. + ## How It Works ### Context Architecture @@ -180,6 +192,8 @@ The server plugin reads API credentials from SillyTavern's secrets store first, | SDK import error | Run `cd plugins/honcho-proxy && npm install` | | Extension loads but nothing happens | Enable the checkbox and ensure workspace ID is set | | Plugin on disk but "Honcho Memory" drawer doesn't appear at all | Set `enableServerPlugins: true` in `config.yaml`; the panel can't show plugins the server never loaded | +| Peer name on a new chat still shows an old value | Clear the panel override field (falls back to root / ST persona) or set a new value | +| Re-enabling global config didn't populate the UI | You canceled on the diff dialog — click Enable again and choose Inherit | --- From d7fdf6d48a4bcc5c4480da5046dcd44dad2a94fa Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 12:50:16 -0400 Subject: [PATCH 05/12] docs(sillytavern): clarify write scope MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The plugin also writes to a root-level `sessions` map (ST dir → last Honcho session ID), not only to `hosts.sillytavern.*`. The earlier phrasing overstated the isolation claim. --- docs/v3/guides/integrations/sillytavern.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index 5097a1a1..bf914086 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -65,7 +65,7 @@ If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the ex 2. Root-level `` (shared default across tools) 3. For `apiKey` only: fall through to the Extensions-panel key (SillyTavern's secret manager), which takes priority at request time — entering one in the UI overrides the file without touching it. -**Writes** are always scoped to `hosts.sillytavern` — the extension never mutates settings for other tools. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. +**Writes** are scoped to `hosts.sillytavern.*` and a root-level `sessions` map (SillyTavern dir → last Honcho session ID). The extension never mutates other tools' host entries or root fields they own. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. Flat form (single-tool setup): From f30eb1b4421616df1c3d7d39d22898ed180b44e3 Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 12:52:04 -0400 Subject: [PATCH 06/12] docs(sillytavern): drop internal sessions-map detail --- docs/v3/guides/integrations/sillytavern.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index bf914086..e8923794 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -65,7 +65,7 @@ If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the ex 2. Root-level `` (shared default across tools) 3. For `apiKey` only: fall through to the Extensions-panel key (SillyTavern's secret manager), which takes priority at request time — entering one in the UI overrides the file without touching it. -**Writes** are scoped to `hosts.sillytavern.*` and a root-level `sessions` map (SillyTavern dir → last Honcho session ID). The extension never mutates other tools' host entries or root fields they own. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. +**Writes** are scoped to `hosts.sillytavern.*`. The extension never mutates other tools' entries. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. Flat form (single-tool setup): From ee7ef1f1677f21465f5982c015284cfd3926c7e1 Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 12:55:11 -0400 Subject: [PATCH 07/12] docs(sillytavern): move Global Config after How It Works --- docs/v3/guides/integrations/sillytavern.mdx | 102 ++++++++++---------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index e8923794..9749e69e 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -55,57 +55,6 @@ Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: 4. Enter **Your peer name** (saves to `hosts.sillytavern.peerName`; auto-synced from your SillyTavern persona on first boot) 5. Status indicator should show **Ready** -## Global Config (Multi-Tool Setups) - -If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension reads from `~/.honcho/config.json` on startup. - -**Resolution order** for `apiKey`, `workspace`, and `peerName`: - -1. `hosts.sillytavern.` (host-specific override) -2. Root-level `` (shared default across tools) -3. For `apiKey` only: fall through to the Extensions-panel key (SillyTavern's secret manager), which takes priority at request time — entering one in the UI overrides the file without touching it. - -**Writes** are scoped to `hosts.sillytavern.*`. The extension never mutates other tools' entries. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. - -Flat form (single-tool setup): - -```json -{ - "apiKey": "your-honcho-api-key", - "peerName": "your-name", - "workspace": "sillytavern", - "enabled": true -} -``` - -Nested form (multiple tools sharing the file): - -```jsonc -{ - "apiKey": "hch-v2-...", - "peerName": "alice", - "workspace": "default", - "hosts": { - "sillytavern": { - "workspace": "sillytavern", - "peerName": "alice-rp" - }, - "claude_code": { "...": "..." }, - "cursor": { "...": "..." } - } -} -``` - -### Disable / Enable global config - -A toggle button in the panel opts out of auto-detection entirely. When disabled, the extension skips the config fetch on load, hides the source line, and saves peer-name edits to the local SillyTavern extension settings instead of the global file. Re-enabling opens a diff-aware dialog if local and global values diverge, offering: - -- **Inherit** — pull global values into this SillyTavern install -- **Push local** — overwrite the global host entry with your local values -- **Cancel** — leave both untouched - -Empty local values are never pushed, so a blank field cannot accidentally delete a host key. - ## How It Works ### Context Architecture @@ -166,6 +115,57 @@ By default, only the user peer accumulates derived memory — Honcho observes th | User sends message | Stores message in Honcho session | | AI responds | Stores response in Honcho session | +## Global Config (Multi-Tool Setups) + +If you already use Honcho with other tools (Claude Code, Cursor, Hermes), the extension reads from `~/.honcho/config.json` on startup. + +**Resolution order** for `apiKey`, `workspace`, and `peerName`: + +1. `hosts.sillytavern.` (host-specific override) +2. Root-level `` (shared default across tools) +3. For `apiKey` only: fall through to the Extensions-panel key (SillyTavern's secret manager), which takes priority at request time — entering one in the UI overrides the file without touching it. + +**Writes** are scoped to `hosts.sillytavern.*`. The extension never mutates other tools' entries. Panel edits for Workspace ID and peer name save back to `hosts.sillytavern.workspace` and `hosts.sillytavern.peerName` respectively (debounced). Empty values clear the host override and fall through to the root value. + +Flat form (single-tool setup): + +```json +{ + "apiKey": "your-honcho-api-key", + "peerName": "your-name", + "workspace": "sillytavern", + "enabled": true +} +``` + +Nested form (multiple tools sharing the file): + +```jsonc +{ + "apiKey": "hch-v2-...", + "peerName": "alice", + "workspace": "default", + "hosts": { + "sillytavern": { + "workspace": "sillytavern", + "peerName": "alice-rp" + }, + "claude_code": { "...": "..." }, + "cursor": { "...": "..." } + } +} +``` + +### Disable / Enable global config + +A toggle button in the panel opts out of auto-detection entirely. When disabled, the extension skips the config fetch on load, hides the source line, and saves peer-name edits to the local SillyTavern extension settings instead of the global file. Re-enabling opens a diff-aware dialog if local and global values diverge, offering: + +- **Inherit** — pull global values into this SillyTavern install +- **Push local** — overwrite the global host entry with your local values +- **Cancel** — leave both untouched + +Empty local values are never pushed, so a blank field cannot accidentally delete a host key. + ## Architecture ``` From 3d37b343cbdd2d6a4f631c3ed923506fb39d53b1 Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 13:02:25 -0400 Subject: [PATCH 08/12] docs(sillytavern): fix tool count (2, not 3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit honcho_save_observation is not registered in the extension — only honcho_query_memory and honcho_search_history exist in code. --- docs/v3/guides/integrations/sillytavern.mdx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index 9749e69e..1ef07c87 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -77,12 +77,11 @@ Both the context and reasoning layers use stale-while-revalidate with configurab ### Tool Call Mode -In tool call mode, the extension registers three function tools that the LLM can invoke: +In tool call mode, the extension registers two function tools that the LLM can invoke: | Tool | Description | | --- | --- | | `honcho_query_memory` | Dialectic chat query -- ask Honcho what it knows | -| `honcho_save_observation` | Save an insight about the user to memory | | `honcho_search_history` | Semantic search across session messages | This mode works best with models that support function calling. The LLM decides when to query memory rather than firing on every turn. From 6d26666df244ad28abce1d1a843e98bff1daebb0 Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 13:33:59 -0400 Subject: [PATCH 09/12] docs: drop architecture ASCII from sillytavern guide --- docs/v3/guides/integrations/sillytavern.mdx | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index 1ef07c87..c303f31f 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -165,22 +165,6 @@ A toggle button in the panel opts out of auto-detection entirely. When disabled, Empty local values are never pushed, so a blank field cannot accidentally delete a host key. -## Architecture - -``` -Browser (Client Extension) Server (Plugin) -+-----------------------+ +------------------------------+ -| index.js | fetch() | plugin/index.js | -| | ------------> | | -| - Settings UI | /api/plugins/ | - Express router (9 routes) | -| - Event hooks | honcho-proxy | - Honcho SDK (@honcho-ai/sdk)| -| - Prompt injection | | - API key from ST secrets or | -| - Tool registration | | ~/.honcho/config.json | -+-----------------------+ +------------------------------+ -``` - -The server plugin reads API credentials from SillyTavern's secrets store first, falling back to `~/.honcho/config.json`. It re-reads the global config before every write to prevent race conditions with concurrent tools. - ## Troubleshooting | Symptom | Fix | From b81762f5012c57bedaffd1df36e0f1903152515e Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 14:26:59 -0400 Subject: [PATCH 10/12] docs(sillytavern): group chat + session behavior, add missing tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New Group Chats subsection: documents per-character peer routing (each group member gets their own peer, not a collapsed group- peer) and lazy peer registration for characters joining mid-chat. - Session Naming: documents the freeze-on-first-assign invariant (changing the naming mode doesn't reroute existing chats) and the Reset button for explicit session rollover. - Tool table: add honcho_save_conclusion — prior fix undercounted (2 -> 3 tools). The extension registers all three. --- docs/v3/guides/integrations/sillytavern.mdx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index c303f31f..e062a9e2 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -77,11 +77,12 @@ Both the context and reasoning layers use stale-while-revalidate with configurab ### Tool Call Mode -In tool call mode, the extension registers two function tools that the LLM can invoke: +In tool call mode, the extension registers three function tools that the LLM can invoke: | Tool | Description | | --- | --- | | `honcho_query_memory` | Dialectic chat query -- ask Honcho what it knows | +| `honcho_save_conclusion` | Save a key insight or biographical detail about the user to persistent memory | | `honcho_search_history` | Semantic search across session messages | This mode works best with models that support function calling. The LLM decides when to query memory rather than firing on every turn. @@ -97,6 +98,10 @@ By default, only the user peer accumulates derived memory — Honcho observes th | **Single peer** | One user peer shared across all characters | | **Per-persona** | Each character gets its own isolated memory | +### Group Chats + +Group chats register **one peer per character** in the group, not a single collapsed `group-` peer. Each character's messages land under their own peer so their derived representations stay distinct. Characters who join the group mid-chat are lazy-added to the session on their first message. + ### Session Naming | Mode | Behavior | @@ -105,6 +110,10 @@ By default, only the user peer accumulates derived memory — Honcho observes th | **Per-character** | One session per character (persistent) | | **Custom** | User-defined session name | +**Session IDs are frozen once assigned.** Changing the naming mode, the custom session name, or the character name only affects *new* chats — existing chats stay linked to their original Honcho session so history, summaries, and derivations don't fragment. + +The Active session field in the panel is read-only. To start fresh, use the **Reset** button next to it — it orphans the current session (messages remain in Honcho but the chat unlinks from them) and creates a new session on the next message. + ### Event Flow | SillyTavern Event | Action | From 28dcb136abcb77fc2231b62e5031ae455df950f1 Mon Sep 17 00:00:00 2001 From: Erosika Date: Thu, 23 Apr 2026 15:56:21 -0400 Subject: [PATCH 11/12] docs(sillytavern): unify peer modes and session naming, move group chats last, drop event flow --- docs/v3/guides/integrations/sillytavern.mdx | 27 +++++++-------------- 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index e062a9e2..013a4da7 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -91,37 +91,28 @@ This mode works best with models that support function calling. The LLM decides By default, only the user peer accumulates derived memory — Honcho observes the user's messages and derives conclusions across sessions. The AI character's persona comes from its character card, not from peer derivation. If you want the character to have its own Honcho-derived state, configure it as an additional peer in session setup. -### Peer Modes +### Peer Modes and Session Naming -| Mode | Behavior | +Peer mode controls memory partitioning; session naming controls conversation partitioning. Pair them to get the isolation you want. + +| Peer Mode | Behavior | | --- | --- | | **Single peer** | One user peer shared across all characters | | **Per-persona** | Each character gets its own isolated memory | -### Group Chats - -Group chats register **one peer per character** in the group, not a single collapsed `group-` peer. Each character's messages land under their own peer so their derived representations stay distinct. Characters who join the group mid-chat are lazy-added to the session on their first message. - -### Session Naming - -| Mode | Behavior | +| Session Naming | Behavior | | --- | --- | | **Auto** | Per-chat hash (unique per conversation) | | **Per-character** | One session per character (persistent) | | **Custom** | User-defined session name | -**Session IDs are frozen once assigned.** Changing the naming mode, the custom session name, or the character name only affects *new* chats — existing chats stay linked to their original Honcho session so history, summaries, and derivations don't fragment. +Session IDs are frozen once assigned. Changing the naming mode, the custom session name, or the character name only affects new chats — existing chats stay linked to their original Honcho session so history, summaries, and derivations don't fragment. -The Active session field in the panel is read-only. To start fresh, use the **Reset** button next to it — it orphans the current session (messages remain in Honcho but the chat unlinks from them) and creates a new session on the next message. +The Active session field in the panel is read-only. To start fresh, hit **Reset** next to it — the current session gets orphaned (messages stay in Honcho, the chat unlinks) and a new session starts on the next message. -### Event Flow +### Group Chats -| SillyTavern Event | Action | -| --- | --- | -| Chat opened | Creates or retrieves Honcho session + peers | -| Before generation | Injects memory context into the prompt | -| User sends message | Stores message in Honcho session | -| AI responds | Stores response in Honcho session | +Group chats register one peer per character, not a single collapsed `group-` peer. Each character's messages land under their own peer, so their derived representations stay distinct. Characters who join mid-chat get lazy-added to the session on their first message. ## Global Config (Multi-Tool Setups) From 9d68149ded1d8fd20509929200e07605eaeac3ac Mon Sep 17 00:00:00 2001 From: Erosika Date: Fri, 24 Apr 2026 13:57:13 -0400 Subject: [PATCH 12/12] docs(sillytavern): correct panel labels, split installer per-platform, surface other knobs --- docs/v3/guides/integrations/sillytavern.mdx | 38 +++++++++------------ 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/docs/v3/guides/integrations/sillytavern.mdx b/docs/v3/guides/integrations/sillytavern.mdx index 013a4da7..6e09b164 100644 --- a/docs/v3/guides/integrations/sillytavern.mdx +++ b/docs/v3/guides/integrations/sillytavern.mdx @@ -31,13 +31,15 @@ bash <(curl -fsSL https://raw.githubusercontent.com/plastic-labs/sillytavern-hon irm https://raw.githubusercontent.com/plastic-labs/sillytavern-honcho/main/install.ps1 | iex ``` -The installer: +The installer (macOS / Linux): 1. Clones the extension into `public/scripts/extensions/third-party/sillytavern-honcho` 2. Symlinks the server plugin to `plugins/honcho-proxy` 3. Installs the `@honcho-ai/sdk` dependency 4. Bootstraps `config.yaml` if it doesn't exist (briefly runs `npm start` to generate defaults) 5. Sets `enableServerPlugins: true` in `config.yaml` -6. Detects your `~/.honcho/config.json` if it exists +6. Detects your `~/.honcho/config.json` and warns if no resolvable `apiKey` + +The Windows installer does steps 1–3 (using a directory junction via `mklink /J` instead of a symlink) and checks for `~/.honcho/config.json`, but does **not** bootstrap `config.yaml` or flip `enableServerPlugins`. If `config.yaml` is missing, start SillyTavern once to generate it; then set `enableServerPlugins: true` manually before restarting. ### Step 2: Restart SillyTavern @@ -47,10 +49,10 @@ The installer: ### Step 3: Configure -Open **Extensions** (puzzle piece icon) and expand **Honcho Memory**: +Open **Extensions** (puzzle blocks icon) and expand **Honcho Memory**: 1. Check **Enable Honcho Memory** -2. Click the API key field to set your key (auto-populated if present in `~/.honcho/config.json`; the UI value overrides the file) +2. Click the API key field to set your key. The plugin falls back to `~/.honcho/config.json` at request time if no panel key is set; a panel value always wins. 3. Enter your **Workspace ID** (saves to `hosts.sillytavern.workspace`) 4. Enter **Your peer name** (saves to `hosts.sillytavern.peerName`; auto-synced from your SillyTavern persona on first boot) 5. Status indicator should show **Ready** @@ -66,10 +68,10 @@ The **enrichment mode** controls what layers on top of the base context: | Mode | Behavior | | --- | --- | | **Context only** | Base layer only -- peer representation + session summary | -| **Reasoning** (default) | Base layer + dialectic `peer.chat()` queries on a configurable interval | +| **Reasoning** (default) | Base layer + dialectic `peer.chat()` queries on a configurable per-turn cadence | | **Tool call** | Base layer + function tools the LLM can call on demand | -Both the context and reasoning layers use stale-while-revalidate with configurable refresh intervals. After the first turn of a session, there is zero added latency. +Both the context and reasoning layers use stale-while-revalidate with a configurable cadence ("Refresh every N turns" and "Reason every N turns"). After the first turn of a session, there is zero added latency. **Context only** mode relies on `session.context()`, which is session-scoped — it returns empty output until the session has enough messages for Honcho to derive a representation and summary. For fresh sessions or peers with little history, Reasoning mode is a better default: it queries `peer.chat()` across all of the peer's history, not just the current session. @@ -87,9 +89,13 @@ In tool call mode, the extension registers three function tools that the LLM can This mode works best with models that support function calling. The LLM decides when to query memory rather than firing on every turn. +### Other Panel Knobs + +The Extensions panel also exposes: **Context settings** (token budget, refresh cadence in turns, include session summary), **Injection position** (After/Before main prompt, or In-chat @ Depth with a numeric depth field), a **Prompt Template** textarea that wraps Honcho output via a `{{text}}` placeholder, and a **Reasoning queries** textarea (`{{message}}` placeholder) for customizing the dialectic prompts used in Reasoning mode. + ### Peer Observability -By default, only the user peer accumulates derived memory — Honcho observes the user's messages and derives conclusions across sessions. The AI character's persona comes from its character card, not from peer derivation. If you want the character to have its own Honcho-derived state, configure it as an additional peer in session setup. +By default, only the user peer accumulates derived memory — Honcho observes the user's messages and derives conclusions across sessions. The AI character's persona comes from its character card, not from peer derivation. ### Peer Modes and Session Naming @@ -97,13 +103,13 @@ Peer mode controls memory partitioning; session naming controls conversation par | Peer Mode | Behavior | | --- | --- | -| **Single peer** | One user peer shared across all characters | -| **Per-persona** | Each character gets its own isolated memory | +| **Single peer for all personas** | One user peer shared across all personas | +| **Separate peer per persona** | Each persona gets its own isolated memory | | Session Naming | Behavior | | --- | --- | | **Auto** | Per-chat hash (unique per conversation) | -| **Per-character** | One session per character (persistent) | +| **Per character** | One session per character (persistent) | | **Custom** | User-defined session name | Session IDs are frozen once assigned. Changing the naming mode, the custom session name, or the character name only affects new chats — existing chats stay linked to their original Honcho session so history, summaries, and derivations don't fragment. @@ -155,16 +161,6 @@ Nested form (multiple tools sharing the file): } ``` -### Disable / Enable global config - -A toggle button in the panel opts out of auto-detection entirely. When disabled, the extension skips the config fetch on load, hides the source line, and saves peer-name edits to the local SillyTavern extension settings instead of the global file. Re-enabling opens a diff-aware dialog if local and global values diverge, offering: - -- **Inherit** — pull global values into this SillyTavern install -- **Push local** — overwrite the global host entry with your local values -- **Cancel** — leave both untouched - -Empty local values are never pushed, so a blank field cannot accidentally delete a host key. - ## Troubleshooting | Symptom | Fix | @@ -187,7 +183,7 @@ Empty local values are never pushed, so a blank field cannot accidentally delete New to SillyTavern? Start here — install guide for macOS, Linux, Windows, Docker. - + Agent-assisted install — idempotent, structural patches, end-to-end verification.