Skip to content

Settings

Settings is the non-terminal control room. It reads the daemon’s current state, shows where each value came from, and writes durable changes back to Kanade’s local config files.

The first settings panel explains the feature split:

  • Claude Code only means the feature works after you connect a Claude Code lane. Agent chat, tools, MCP, skills, shell commands, file edits, sessions, live telemetry, and the local ledger are in this bucket.
  • Local LLM optional means the feature uses LM Studio, Ollama, or another OpenAI-compatible endpoint for prose. Yume, Optimize narration, and per-session chronicle paragraphs are in this bucket.

Direct mode is listed separately because it is plain provider chat from Kanade, not Claude Code agent mode.

Yume and session narration use an OpenAI-compatible local model. LM Studio is the default; Ollama is the backup path.

  • LM Studio URL: usually http://localhost:1234/v1.
  • LM Studio model: should match a model returned by GET /v1/models.
  • Test connection: first probes /models; if localhost fails on Windows, Kanade retries 127.0.0.1 and reports that fallback.

The test result distinguishes invalid URL, timeout, unreachable server, server reachable but model missing, and model reachable.

Use this section for durable lane changes:

  • Rename a lane or edit its command.
  • Assign a provider such as Claude, DeepSeek, Gemini, Codex, LM Studio, Ollama, or OpenAI-compatible.
  • Choose the lane’s chat mode: agent keeps Claude Code’s tools, skills, hooks, MCP, and slash-command behavior; direct calls the provider API from Kanade for fast chat and image input, but has no tools or skills.
  • Desktop update channel is a read-only updater diagnostic. It checks the live signed Tauri manifest, the advertised Windows payload, signature presence, and whether the channel version is newer than the running build. The recheck button reports checking / checked / retry state plus the last check time. Installing still happens only from the desktop update banner.
  • Set model and base URL.
  • See the active source for model, base URL, and key: account override, process env, persisted disk config, or default.
  • Retest the provider connection.
  • Replace a key without displaying the previous key.
  • Set the default lane.
  • Reload accounts.json from disk.
  • Remove a Kanade account reference with confirmation.

Secret-like env values are masked everywhere. If a key comes from process env, removing the Kanade account reference does not remove that env var. If you replace a key in Settings, Kanade writes an account override that will shadow the process env for that lane.

Chat alerts are local workstation preferences stored in browser/WebView local storage. Sound plays a short two-note tone when the active chat turn finishes. Desktop notification uses the browser notification permission when available and is silent by default, so the sound setting stays the single audio source. Use test sound to verify the current output device and volume.

The default Claude Code permission mode writes to ~/.claude/settings.json :: permissions.defaultMode. Bypass mode still requires confirmation in the UI. Kanade does not use unsafe bypass flags to launch Claude.

The data section shows the daemon uptime, data directory, SQLite chronicle path, hook spool path, and database size. Reveal opens the data directory in Explorer. Nothing in this section is uploaded; it is a local diagnostic view.

Reveal is intentionally allowlisted. Kanade always allows its own data, transcript, skills, and Claude project roots. Add private note vaults with KANADE_VAULT_ROOTS; there is no hardcoded maintainer vault path.

Settings → Diagnostics is the doctor’s room. Every claim is read live from the daemon — no last-good-cached values, no mocks.

  • Update channel doctor. Reads the live signed Tauri manifest at https://kanade.jhinx.dev/updates/latest.json, compares the installed version to the channel version, checks that a signature is present, and HEAD-checks the Windows installer payload (bytes, ETag, response time). Read-only — the real updater banner is still the install path.
  • WebView2 cache reset. When WebView2 goes dark after a major update, hit the reset button: it records a pending request, asks for an app relaunch, and the next launch renames EBWebView to EBWebView.backup-<timestamp>/ before opening a WebView. Signed-in lanes survive — credentials live outside the WebView profile.
  • Chronicle DB integrity. Daemon runs PRAGMA quick_check on startup; the diagnostics view shows the result, the last-checked timestamp, and any recent rebuild metadata (corrupt files are moved to db-corrupt-backup-<timestamp>/, schema rebuilds from events.jsonl).
  • Structured warning ring. SSE errors, turn timeouts (default 180s), and lifecycle-hook failures land in a bounded ring buffer surfaced through /api/diagnostics. Copy the JSON straight into a bug report — secrets are redacted.
  • Copy diagnostic info. One-click copy of the same JSON the maintainer reads when triaging a bug report.

If KANADE_BUG_REPORT_URL is empty, Settings and About hide issue-tracker links. The diagnostic-copy button remains available because it does not send anything automatically.

Skill SKILL.md frontmatter can set retention_days (default: 30). The daemon prunes old skill events daily. Settings has per-skill retention visibility plus a manual purge action; the API equivalent is DELETE /api/skills/{id}/events.

Each account’s mode is editable in Settings → Accounts & Providers — pick agent for the full Claude Code subprocess path, or direct for native provider HTTP streaming. See Direct mode · provider limits for per-provider caveats.