Skip to content

tsukue · the workstation

/tsukue (机, “the desk”) is the headline room. The lanes you connect sit across the top, with chat above a terminal and your context panel on the right. Everything else in kanade is back-of-house relative to this surface.

  • The rail (far left). A vertical strip of kanji — tsukue, live, sessions, catalog, optimize, yume, about. Click a kanji to switch rooms.
  • Account strip (top). One pill per lane you have connected. A lane can be a Claude Code login, another isolated Claude login, a provider CLI, or a Direct provider account. The active pill carries a kin-gold ring. Each current pill has an edit control so you can tune an existing lane instead of adding a duplicate. A small gold dot means that lane’s process is currently running.
  • Project + Files + Skills (left column). The active project switcher at the top, the file tree under it, the skills palette at the bottom. Drag the horizontal splitters between sections to give a section more room; Kanade persists the heights locally after refresh. The skills row filters live; clicking a skill injects /<name> into the input and records a local confirmed-launch telemetry event when you send it. File rows open through the daemon into the host default app, and local paths rendered in chat can be clicked the same way.
  • Chat-view (middle). Tails the transcript JSONL Claude Code writes for your active session. Markdown turns, thinking blocks, tool cards, all rendered live. The A- / % / A+ controls adjust chat text size locally, and streamed replies are smoothed so large provider chunks remain readable.
  • Context · Logs · Sessions · MCP · Setup (right rail). The right tabs.
    • Context is the live token gauge + suggestion card with the right-rail “Kanade is thinking” pulse while a reply streams (v0.2.9+).
    • Logs is a structured per-lane event timeline (v0.2.13 — rewritten from the previous raw ANSI PTY dump). Click any event row to expand prompt / tool input / tool output / raw envelope inline. The raw PTY log is still available underneath a <details> toggle with ANSI sequences stripped for readability.
    • Sessions lists recent work with project, prompt preview, event/tool counts, and a resume here action for compatible history. Native transcript ids are provider-aware: if you are on DeepSeek and the row is a Codex session, Kanade labels it not this lane instead of sending an invalid resume id to the wrong CLI.
    • MCP is the read-only registry of every server you’ve configured.
    • Setup is per-account runtime configuration (CLI probe, masked env, wrap-up routine). Full account editing now lives in Settings.
  • Input bar (bottom). Permission-mode chip on the left, slash quick-buttons on the right, paste-aware textarea below. Drag a file, paste a screenshot, type a prompt — all three land as input on the same session. Image chips can be previewed before send; partial slash commands complete before they execute. Local chronicle data is kept in SQLite, but chat questions stay with the active lane until Kanade has a durable routing policy.

Click a pill to bring its lane to the front. Each lane keeps its own PTY, its own scrollback, its own permission mode, its own active project. Switching between them is roughly free — the PTYs stay alive in the background.

Activation is optimistic: the pill becomes active and the input is focused before the daemon finishes hydrating the lane. That makes one click enough even when a lane has a large transcript or a slow usage panel.

Fresh installs start with zero connected accounts. The empty desk offers two paths: Scan for installed Claude logins to start from a local Claude Code login, or Add a lane manually when you want to choose command, provider, model, and environment variables yourself. Optional JSON bundles live under examples/accounts, but review them before importing because they are examples, not shipped credentials.

The Setup tab on the right rail shows the active lane’s runtime details:

  • Authentication status (logged in / needs OAuth / DeepSeek token missing)
  • Environment variables visible to the spawned process. Existing secret-like values are masked; typing a new secret uses a password field.
  • CLI tool detection (claude in PATH, version)
  • Per-account default permission mode + wrap-up routine

For structural account changes, open Settings -> Accounts & Providers. That view can rename a lane, assign provider/model/base URL, retest the connection, replace a key without revealing the old one, set the default lane, reload accounts.json, switch a lane between agent and direct chat mode, and remove a Kanade account reference. Removing a reference does not delete process env vars, OAuth files, or external CLI credentials.

Agent mode is the normal Claude Code path: tools, MCP, skills, hooks, and provider wrappers all work. Direct mode is for fast plain chat through the provider API. It stores conversation history in Kanade’s SQLite database and can send image parts to providers that support them, but it cannot use Claude Code’s agent loop. Switch back to agent mode before asking a lane to edit files or run commands.

Changes are written to %LOCALAPPDATA%\kanade\accounts.json and take effect on the next session start. If a lane is already running, stop and start it to pick up new env or provider values.

Claude model and effort changes are applied by the chat-send path through Claude Code’s --model and --effort flags. You do not need to restart the lane for the chat-box path.

One caveat matters: Claude Code does not expose the active effort flag to the model’s self-report. Kanade therefore shows the requested model/effort in the bottom proof chip and tooltip. Model/effort changes now preserve the cached resume target where possible so the next turn can keep context; use /clear when you deliberately want a fresh underlying Claude Code session.

Auto is Claude Code’s default effort mode. Kanade sends no --effort flag in that state; it is not yet a smart router that picks cheaper/faster models based on the prompt.

The requested model/effort is visible in Kanade’s bottom proof chip. Treat that local proof as authoritative; a Claude answer saying it cannot see effort is about Claude Code’s introspection limit, not about what Kanade sent.

Kanade also checks daemon-owned cached resume ids before sending them to Claude Code. If the transcript backing a cached id has disappeared, the next turn starts fresh with a system notice instead of failing with No conversation found with session ID. For older work chosen from the Sessions rail, Kanade only arms history that matches the active lane’s provider.

The chat-view is the friendly surface — markdown rendered, tool cards collapsed, thinking blocks foldable. When you need raw output, click the TERMINAL ▲ chip at the bottom-right of the status bar to slide up the terminal drawer. Both surfaces are wired to the same PTY; whatever you do in one is reflected in the other.

The chip cycles through default → accept-edits → plan → bypass. Each click injects ESC [ Z (Shift+Tab) into the PTY — the same keystroke you’d use in a real terminal — so Claude Code’s internal mode state stays in sync.

Bypass requires a confirm. A modal explains what bypass does (Claude can run any tool without asking) before the mode actually engages. The default mode you end on persists to ~/.claude/settings.json :: permissions.defaultMode and applies to every new lane.

The bottom row is a compact status strip: active account, PID, current working directory, model/effort controls for Claude lanes, build version, terminal-drawer toggle, and a wall clock. It is diagnostic space, not an input surface; if the center pane feels cramped, resize the project rail, adjust the Project / Files / Skills section splitters, or hide the terminal drawer first. The left project/files/skills rail and right context rail are drag-resizable; Kanade stores their widths and left-section heights in local browser storage.

In a normal browser preview, the global left rail may show BRIDGE web. That only means the Tauri IPC bridge is absent because you are not inside the packaged desktop shell. Chat, files, accounts, and provider lanes still run through the daemon; the IPC bridge is used for desktop-shell affordances such as update plumbing.

Usage cards may show list est. for token cost. That is a list-price estimate derived from token counts, useful for scale and burn-rate awareness. Claude Pro or Max subscription lanes are not billed by Kanade as API calls.