Projects

in-progress / case study

Kanade

A private Windows workstation for AI coding sessions: chat above terminal, provider lanes, local memory, Mission Control, Forge handoff, Discord bridge, update proof, and diagnostics on one desk.

Statusin-progress
SurfaceLive demo
Updated2026-06-02
OutcomeMakes long AI coding sessions recoverable instead of scattering state across shells and notes.

Stack and decisions

Tauri 2

Keeps the app local, desktop-native, and shippable through a signed Windows installer.

SvelteKit

Fits the dense workbench UI without forcing a heavyweight desktop UI stack.

FastAPI

Separates daemon behavior from the shell so provider and diagnostic paths stay testable.

SQLite

Stores sessions, memory, activity, and recovery data locally without a service dependency.

PyInstaller

Packages the Python daemon into the updater/install story.

NSIS

Owns the Windows install and update surface that has to be verified on disk.

Claude Code

Part of Kanade's current operating boundary.

Codex

Part of Kanade's current operating boundary.

Discord

Part of Kanade's current operating boundary.

Obsidian

Part of Kanade's current operating boundary.

Timeline

Started 2026-05-16

Updated 2026-06-02

Surface Live demo

What it is

Kanade (奏 — "to play, to orchestrate") is a local workstation for the AI work I already do. It wraps coding agents in a Windows desktop app with a readable chat surface, an embedded terminal drawer, a file tree, provider lanes, skills, token/context proof, live tool activity, local memory, and release diagnostics in one place.

The headline view is /tsukue: the desk. Chat stays spacious in the center. The terminal is there when I need the raw shell. The side rails keep the work legible: files, skills, sessions, context, logs, diagnostics, and account status without making the conversation feel like a cramped dashboard.

The provider model is account-neutral now. Kanade starts empty, then I bring the lanes I actually use: Claude, Codex, Gemini, DeepSeek, or separate Claude accounts. Each lane keeps its own config directory, model, credentials, working directory, and guardrails. Optional starter presets exist, but the app does not assume my accounts for me.

The public site at kanade.jhinx.dev is the show floor, not the app itself. It has the Forge Relay copy, current screenshots, public docs, and a readable tour of the workstation. The desktop app stays private and local.

Why I built it

The first version was an observatory for Claude Code hook events. It watched every tool call, skill load, prompt, and session end. That was useful, but it still left the actual work split between a terminal window and a browser dashboard.

The pivot was simple: the observatory should become the back of the room. The front should be the desk.

I wanted one place where I could talk to Claude, switch accounts or providers, keep proof nearby, watch context burn, and recover what happened in a previous sitting without spelunking through logs. Grafana watches infrastructure. Kanade watches the work because the work is happening inside it.

The visual register matters too. Kanade is deliberately not another purple AI SaaS page. The app and site use matsubairo green, kin gold, Cormorant Garamond, small-caps labels, and Edo book-plate imagery. It feels like a quiet workshop: dense, calm, old-world, but built for live tool use.

What it does now

What I learned

Status & next steps

Kanade is still in private development. v0.12 is installed on the maintainer machine for local release verification, and v0.13 is the private-readiness pass — empty-first guided onboarding with generic provider lanes, the Obsidian companion plugin, and a first run polished enough to survive an install by someone who isn't me. There is still no public download, invite flow, or tester access path.

The site at kanade.jhinx.dev explains the Forge Relay direction, and the docs site has the current memory, mission, Forge, and Discord material. The app itself stays closed-source while the rough edges land.

Near-term work is practical: finish live-provider proof with real direct-mode credentials, get the remaining user-side Discord slash proof, exercise the disruptive Tauri-window paths, and keep the installer/update path boring.