Skip to content
CAI
Software that uses CAICheck a score

tw93/Kaku

65.8

Adequate · 29 September 2026

282.9k

lines of production code

Rust

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Kaku is a terminal emulator and AI-integrated development environment, rebranded from WezTerm, that combines a high-performance GUI with a comprehensive CLI toolchain. It features a built-in AI assistant capable of interactive chat, code analysis, and shell command execution, supported by a remote WebSocket service for mobile access. The system provides robust terminal emulation with advanced rendering, shell integration, and cross-platform support, while exposing extensive configuration and automation capabilities through Lua bindings and a dedicated CLI interface.

Features

AI chat overlay now includes terminal context and command history

The AI chat overlay now automatically captures and sends terminal context to the AI assistant. This includes the visible terminal lines, a snapshot of the tab's history (capped at 12KB), the current working directory and remote host status, any selected text, and the output of the last failed command (if the exit code was non-zero). The overlay also uses a dedicated color palette derived from the terminal theme for consistent styling.

kaku-gui/src/termwindow · high confidence

Add Kaku Agent Guide and Contributing documentation

The repository now includes \AGENTS.md\, a comprehensive guide for AI agents detailing the repository map, working rules, subsystem-specific instructions, and verification steps, alongside \CONTRIBUTING.md\ which provides setup and development instructions for human contributors.

(repo-wide) · high confidence

Added shared AI utility functions for configuration and model identification

The \kaku-ai-utils\ crate now provides two shared utilities for other Kaku components. The \codex\_home\_dir\ function resolves the user-level Codex configuration directory by checking the \CODEX\_HOME\ environment variable, falling back to \.codex\ in the home directory, ensuring consistent configuration paths across the GUI and CLI. Additionally, \is\_chat\_model\_id\ filters out non-conversational model IDs (such as those for embeddings, TTS, image generation, or moderation) to help components correctly identify chat-capable models.

crates/kaku-ai-utils · high confidence

Introduce kaku-remote crate with secure WebSocket server and AI chat support

This change introduces the new \kaku-remote\ crate, providing a WebSocket-based remote server for terminal access. It implements secure authentication via a cryptographically generated token and QR code pairing, with hardening measures including input size limits (65KB max) and concurrency caps (4 max in-flight AI chats) to prevent abuse. The server supports real-time screen updates and integrates with a pluggable AI handler system, allowing mobile clients to initiate AI chat sessions that stream responses back to the user.

crates/kaku-remote · high confidence

Introduce managed shell integration with first-run setup and config versioning

Kaku now includes a complete shell integration layer for Zsh and Fish, installed via a new first-run experience (first\_run.sh) and managed through a config version system (config\_version.txt, check\_config\_version.sh). This integration provides a 'batteries-included' environment by bootstrapping tools like Starship, Zoxide, and Yazi, and synchronizing themes across the terminal and file manager. It also introduces an SSH wrapper that overrides the TERM variable to prevent rendering issues on remote hosts, caches user variables for faster prompt rendering, and adds an inline AI query handler for shell error fixes.

assets/shell-integration · high confidence

Introduce standalone Kaku Relay service for WebSocket pairing

This change introduces the \kaku-relay\ crate, a standalone service that facilitates WebSocket connections between desktop hosts and mobile clients. The relay accepts host connections at \/h/{token}\ and client connections at \/c/{token}\, pairing them via a shared token and forwarding messages bidirectionally. It includes a health check endpoint at \/health\, enforces a limit of 1,000 pending host connections to prevent resource exhaustion, and supports deployment via Docker and Fly.io configuration.

crates/kaku-relay · high confidence

Introduce standalone \`k\` CLI chat with TUI and pipe-friendly modes

A new standalone CLI chat interface is available via the \k\ command, supporting both an interactive alternate-screen TUI (powered by termwiz) and a one-shot pipe-friendly mode that streams tokens directly to stdout. The TUI automatically detects dark/light themes via the COLORFGBG environment variable and renders distinct colors for user, AI, and system text. When invoked from within the Kaku editor without arguments, it triggers the existing Cmd+L AI chat overlay via an OSC 1337 terminal control sequence, ensuring a consistent experience. The module also handles conversation management, including resuming recent chats, creating new conversations per working directory, and cleaning up temporary tool spill files.

_kaku-gui/src/cli\chat · high confidence

New 'k' CLI entry point for AI chat

A new standalone binary named 'k' has been added to the project, providing a command-line interface for AI chat functionality. This tool allows users to initiate one-shot queries or enter an interactive mode with support for slash commands such as /new, /resume, /clear, /status, /memory, and /exit. It serves as a thin wrapper around the existing CLI chat library, enabling terminal-based interaction with the AI assistant.

kaku-gui/src/bin · high confidence

New AI authentication, remote chat, and inline AI security infrastructure

The GUI now includes a complete backend for AI authentication and communication: \ai\_auth.rs\ handles OAuth token management for GitHub Copilot and reads credentials for the Codex CLI; \ai\_remote.rs\ wires remote AI chat requests from the iOS app (kaku-remote) to the local AI client; \inline\_ai.rs\ and \inline\_ai\_control.rs\ bridge shell-generated AI requests to the AI client while enforcing security via a local capability file to validate privileged OSC user variables. Additionally, \ai\_conversations.rs\ and \ai\_state.rs\ provide persistent storage for chat history and UI state, and \codex\_connection.rs\ manages the connection to the Codex backend.

kaku-gui/src · high confidence

New AI client module with assistant configuration and Responses API support

The \kaku-gui/src/ai\_client\ module has been introduced to handle the built-in chat overlay's AI interactions. It loads settings from \assistant.toml\, supporting both the Chat Completions and the newer Responses API wire formats. The client now handles tool calling, parses streaming responses (including reasoning content from models like DeepSeek and Kimi), and manages HTTP transport with system proxy detection and private-range bypasses. It also includes a filter to strip inline \\<thinking\>\ tags from streamed text.

_kaku-gui/src/ai\client · high confidence

New AI configuration and chat subcommands

Kaku now includes dedicated CLI subcommands for managing AI tools and starting chats. The \kaku ai\ command launches a new interactive TUI (\ai\_config\) that lets users configure and monitor a wide range of AI providers—including Kaku Assistant, Codex, Claude Code, Kimi, Antigravity, Gemini, Copilot, Factory Droid, and OpenClaw—by editing their respective config files and viewing usage summaries. Additionally, the \kaku chat\ subcommand provides a discoverable entry point to the bundled \k\ chat binary, allowing users to start conversations without needing to know about the \k\ shortcut or having shell integration active.

kaku · high confidence

New build, release, and quality-assurance scripts for Kaku on macOS

The repository now includes a comprehensive suite of shell scripts to manage the Kaku build pipeline and release process. \scripts/build.sh\ handles building the Rust application into a universal macOS app bundle with Developer ID code signing and notarization support. \scripts/nightly.sh\ automates the creation and publishing of nightly preview releases to GitHub, while \scripts/release.sh\ and \scripts/prep\_release.sh\ manage version bumping, changelog generation, and final release publishing. Quality assurance is enforced through scripts like \scripts/check\_logs.sh\ (preventing debug prints in production), \scripts/check\_prompts.sh\ (validating AI prompt metadata), \scripts/check\_startup\_budget.sh\ (monitoring startup performance), and \scripts/check\_toolchain\_pins.sh\ (ensuring CI consistency). Additionally, \scripts/download\_vendor.sh\ manages pinned shell integration dependencies, and \scripts/bench\_startup.sh\ provides a tool for comparing Kaku's startup speed against other terminals.

scripts · high confidence

New configuration options and macOS proxy detection

This update introduces several new configuration capabilities and improves macOS network handling. Users can now configure per-pane character encodings (UTF-8, GBK, GB18030, Big5, EUC-KR, Shift-JIS) and control working directory inheritance for new windows, tabs, and split panes. The color system supports truecolor overrides for both background and foreground colors to fix contrast issues. On macOS, the application now automatically detects and uses the system proxy for updates and network requests, and supports a global hotkey to show or hide the app. Additional UI tweaks include a configurable split pane gap, smart tab mode for shell integration, and options to control copy-on-select behavior and alternate screen wheel scrolling.

config/src · high confidence

Support for DECSET 1007 alternate scroll mode

The escape sequence parser now recognizes the DECSET 1007 mode, which controls the xterm alternate scroll behavior. This addition allows the terminal to correctly parse and handle the escape sequences required to enable or disable this specific scrolling mode.

crates/wezterm-escape-parser · high confidence

macOS app renamed to Kaku with global hotkey and clipboard image support

The macOS application class and delegate have been renamed from WezTerm to Kaku (e.g., \KakuAppDelegate\), and the app now registers a global hotkey to show/hide the window. Clipboard handling has been expanded to support pasting images by normalizing TIFF data to PNG and caching them in the runtime directory. Additionally, the app can now set itself as the default terminal for shell scripts and display a badge on the Dock for unread notifications.

window/src/os · high confidence

Removals

Removal of debug logging utility for image bitmaps

The \log\_bits\ method, which was previously available on the \Image\ struct to dump pixel data for debugging purposes, has been removed from the \window/src/bitmaps\ module. This cleanup eliminates unused code and reduces the public API surface for internal bitmap handling.

window/src/bitmaps · high confidence

Removal of legacy GUI frontend and terminal overlay components

The \wezterm-gui\ source files for the legacy \GuiFrontEnd\ implementation, terminal-based confirmation overlays, debug REPL, scrollbar, tab bar, clipboard handling, mouse event processing, command palette, and window border rendering have been deleted. This change removes the underlying code for the previous GUI architecture and its associated UI components.

wezterm, wezterm-gui · high confidence

Removal of unused internal utility crates

The \bidi/generate\, \strip-ansi-escapes\, and \wezterm-mux-server\ crates have been removed from the codebase. This cleanup eliminates the bidi data generator, a standalone utility for stripping ANSI escape sequences, and the legacy mux server implementation (including its daemonization and TLS listener logic), reducing the project's maintenance surface by discarding components that are no longer used.

bidi/generate, strip-ansi-escapes, wezterm-mux-server · high confidence

Removed example programs and color-scheme sync tooling

Deleted several example programs across the codebase, including the BIDI shaping example, the SSH client example, and multiple termwiz examples (buffered terminal, hello, key tester, line editor, strip-ansi-escapes, terminal direct, and widget demos). Also removed the sync-color-schemes tool and its modules (base16, gogh, iterm2, scheme, sexy, and main), which were used to fetch and sync external color schemes. Additionally, removed the window async example and its associated WGSL shader file.

(repo-wide) · high confidence

Behavioural changes

7 commits (0 fixes) modifying assets

A change to existing behaviour in assets — 7 commits, 3 files.

assets · medium confidence · unverified

AI chat overlay rewritten with modular input handling and enhanced Markdown rendering

The AI chat overlay (Cmd+L) has been restructured into focused submodules, introducing a dedicated input handler that supports macOS-native shortcuts (Cmd+Z undo, Cmd+Backspace clear, Option+Backspace delete word), multi-line prompts via Shift+Enter, and Ctrl+O to toggle thinking content visibility. The overlay now features a robust Markdown parser that renders pipe tables, diffs, and syntax-highlighted code blocks using syntect, while the layout engine correctly handles wide characters (CJK) and hard-wraps input to prevent cursor overflow. Additionally, the system now captures a sandboxed snapshot of the visible terminal output to provide context for AI responses, and tool-call progress is displayed with grouped, verb-tensed status indicators.

_kaku-gui/src/overlay/ai\chat · high confidence

Apply Clippy lint fixes and modernize Rust code patterns

This update applies Clippy suggestions across the vtparse and wezterm-char-props crates to improve code quality and reduce warnings. Key changes include removing redundant static lifetimes in constant definitions (e.g., in widechar\_width.rs and emoji\_presentation.rs), simplifying iterator usage (e.g., using .copied() instead of .map(\|tuple\| \*tuple) in nerdfonts.rs), and refactoring error handling in vtparse to inline result checks. These changes do not alter user-facing behavior but ensure the codebase adheres to current Rust best practices.

crates/vtparse, crates/wezterm-char-props · high confidence

Bidi crate reorganized into crates/ directory with updated lint allowances

The bidi crate has been moved from the repository root into the crates/ directory, affecting all source files, data files, and tests. Additionally, the crate's lib.rs now explicitly scopes clippy lint allowances (such as collapsible\_if and needless\_return) to this specific crate, ensuring that legacy linting rules do not leak into other parts of the codebase.

crates/bidi · high confidence

Cleanup of PTY examples and Rust style fixes

The \crates/pty\ crate removes four example files (\bash.rs\, \narrow.rs\, \whoami.rs\, \whoami\_async.rs\) that previously demonstrated synchronous and asynchronous terminal spawning using \portable\_pty\. Additionally, the library source code has been updated to resolve Rust 1.93 clippy warnings, including simplifying \CommandBuilder\ logic and removing an unused \libc\ import on Unix systems.

crates/pty · high confidence

Click-to-update notification handler and macOS notification guard

The macOS toast notification system now supports an update action: clicking a notification with the 'kaku://update' URL triggers an update check via a registered callback, falling back to spawning the GUI process if no callback is set. Additionally, notification initialization and delivery are now guarded by a check for a valid bundle identifier, preventing crashes when running outside an app bundle, and the notification authorization now requests Badge permission.

crates/wezterm-toast-notification · high confidence

Clippy lint fixes and Default trait implementations across workspace

This update applies Clippy suggestions throughout the workspace, primarily removing unnecessary auto-dereferences (e.g., in \bintree\ and \cairo\ build scripts) and suppressing specific lints like \missing\_safety\_doc\ and \unit\_arg\ in \filedescriptor\. It also implements the \Default\ trait for \SimpleExecutor\, \ScopedExecutor\, and \UmaskSaver\ in the \promise\ and \umask\ crates, allowing users to instantiate these types via \Default::default()\. Additionally, minor code style adjustments were made in \rangeset\ and \wezterm-open-url\ to satisfy Clippy rules regarding control flow and mutability.

(repo-wide) · high confidence

Code cleanup and Clippy warning fixes in termwiz

This update resolves Clippy warnings and fixes test compilation issues within the termwiz library. Changes include replacing manual Default implementations with derive macros, simplifying match expressions to use the matches! macro, and updating input parsing logic to use owned arrays instead of references for map keys. Additionally, the codebase adopts modern Rust idioms such as using the ? operator for error propagation, replacing explicit return statements with implicit returns, and switching from Boxed trait objects to direct trait references in ProbeCapabilities. The terminal waker implementation now uses write\_all instead of write, and error handling is updated to use IoError::other.

termwiz/src · high confidence

Corrects pane ID typing and refines backspace rendering logic

The client pane implementation now uses the specific \PaneId\ type instead of \TabId\ for remote pane identification, ensuring accurate typing across the mouse state, client pane, and pane writer components. Additionally, the backspace key handling in the renderable pane logic has been refactored to use a guard condition, and the image attachment code has been reformatted for clarity.

crates/wezterm-client/src/pane · high confidence

Corrects pane identification and refines notification handling in the mux server

The mux server implementation now correctly uses PaneId instead of TabId to identify panes, ensuring that operations like searching and state tracking are scoped to individual panes rather than entire tabs. Additionally, MuxNotification events are now cloned before being sent to subscribers to prevent lifetime issues, and clipboard data is explicitly converted to strings during encoding. These changes fix potential type mismatches and improve the stability of the multiplexing protocol.

crates/wezterm-mux-server-impl · high confidence

Enhanced mouse event data and macOS title-bar double-click support

The MouseEvent struct now includes a \window\_origin\ field to provide the true top-left position of the window's content area in screen coordinates, resolving issues where mixed display scales prevented accurate coordinate calculations. Additionally, a \platform\_click\_count\ field exposes native click counts (such as macOS NSEvent click counts), enabling reliable detection of double-clicks on the title bar for window zooming on macOS. The crate also updates its clippy allowances to scope specific lints to this legacy foundation crate.

crates/wezterm-input-types · high confidence

Improved appearance detection during early startup on macOS

The window functions now handle the system appearance (light/dark mode) more accurately during the application's cold startup phase. On macOS, the code explicitly queries the appearance early via \window::query\_appearance\_early()\ instead of defaulting to light mode, ensuring the UI reflects the user's system theme immediately. On other platforms, a flag is set to track if appearance was queried before the GUI was ready, allowing for potential future handling of this state.

lua-api-crates/window-funcs · high confidence

Improved contrast ratio adjustment fallback for dark backgrounds

The \ensure\_contrast\_ratio\ function in the color-types crate now includes a fallback mechanism when adjusting foreground color to meet minimum contrast requirements against a dark background. If the standard luminance adjustment fails to achieve the target ratio, the function now attempts to use pure black or pure white (preserving the original alpha) as a fallback color. This ensures that text remains readable even in edge cases where previous adjustments were insufficient, and includes a new test to verify this behavior for dark-on-dark scenarios.

crates/color-types · high confidence

Improved error context for Git remote operations

The plugin now provides more specific error messages when Git operations fail due to non-UTF8 encoding. Specifically, if a remote name or URL cannot be decoded as UTF-8, the error will now explicitly state "remote name is not utf8" or "remote url is not utf8" respectively, instead of a generic failure. This aids in debugging issues with repositories that have non-standard character encodings in their remote configurations.

lua-api-crates/plugin · high confidence

Improved font loading performance and emoji fallback correctness

The font subsystem now caches the results of directory scans and built-in font parsing, significantly reducing startup latency and avoiding redundant work during configuration reloads. Additionally, emoji rendering is corrected by filtering out format-only codepoints (such as FE0F, FE0E, ZWJ, and ZWPC) from fallback lookups, preventing them from polluting the fallback chain and breaking complex emoji sequences. On macOS, font fallback processing is now wrapped in an autorelease pool to prevent memory leaks.

crates/wezterm-font/src · high confidence

Improved glyph bearing calculation for emoji with transparent padding

The font rasterizer now correctly adjusts glyph bearings after trimming transparent padding from emoji glyphs. Previously, the rasterizer cropped non-transparent areas but did not account for the offset of the cropped region, leading to incorrect positioning. The \crop\_to\_non\_transparent\ function now returns the crop origin coordinates, which are used to adjust the \bearing\_x\ and \bearing\_y\ values. This ensures that glyphs are positioned accurately relative to the baseline, especially for emoji that have significant transparent padding.

crates/wezterm-font/src/rasterizer · high confidence

The terminal surface now correctly handles hyperlinks containing non-ASCII characters, such as full-width punctuation (e.g., U+FF0C) and CJK text, by treating them as URL boundaries rather than including them in the link. This prevents malformed links when pasting or displaying text with mixed scripts. Additionally, cursor positioning logic has been refined to use unsigned arithmetic for relative movements, ensuring more robust handling of negative offsets and preventing potential underflow issues. The default cursor shape and visibility enums have also been updated to use Rust's standard \Default\ derive macro for cleaner initialization.

crates/wezterm-surface/src · high confidence

Improved image rendering, memory management, and terminal state tracking

The terminal emulator now handles images more robustly by scaling them to fit available space when dimensions are not explicitly constrained, and by reducing the Kitty image memory budget from 320MB to 128MB to lower overall memory usage. It also introduces a Primary Screen Peek mode, allowing users to view shell history while in alternate screen applications, and tracks the last command's exit status and output start for AI context. Additionally, the terminal now supports DECSET 1007 alternate scroll mode for proper mouse wheel behavior in full-screen apps, and PTY write errors are now throttled to reduce log noise.

term/src/terminalstate · high confidence

Improved startup performance and runtime cleanup

The application now starts faster by deferring the registration of optional Lua modules (battery, plugin, ssh, url, and procinfo) until they are first accessed, rather than loading them immediately. Additionally, the cleanup of stale files in the runtime directory (logs, GUI sockets, and agent files) is moved to a background thread to prevent blocking the cold-start process.

crates/env-bootstrap · high confidence

Improved startup stability, input responsiveness, and platform service handling

The windowing layer now prevents a phantom second window from appearing on cold macOS starts by tracking the first-window creation state. Input latency is reduced on macOS by processing spawn queue bursts in the runloop and avoiding lock reentry during event dispatch. The event system is hardened against panics and poisoned mutexes, ensuring the application remains usable after internal errors. New platform capabilities include handling URL schemes to focus specific panes or tabs, setting the app as the default terminal, showing dock badges for notifications, and queuing Finder service requests until the GUI is ready.

window/src · high confidence

Kaku app bundle rebranding and new macOS integration features

The macOS application bundle has been rebranded from WezTerm to Kaku, updating the executable name to kaku-gui, the bundle identifier to fun.tw93.kaku, and the version to 0.12.0. This update introduces several new macOS integration capabilities: a custom URL scheme (kaku://) for opening tabs, AppleScript support via a scripting definition file, and Finder services that allow users to open folders in a new Kaku tab or window directly from the context menu. Additionally, the app now requests Bluetooth permissions for terminal-based BLE development, and folder handling has been adjusted to use the 'Viewer' role with alternate handler ranking.

assets/macos/Kaku.app/Contents · high confidence

Lua API now exposes pane, tab, and domain identifiers as integers

The Lua bindings for the mux module have been updated to return pane, tab, and domain IDs as \usize\ integers instead of their previous opaque types. This change requires Lua scripts to handle these identifiers as simple numbers, and the internal \get\_pane\ and \get\_tab\ functions now accept integer arguments to look up the corresponding objects.

lua-api-crates/mux · high confidence

Migrate macOS configuration from WezTerm to Kaku and add AppleScript support

The bundled macOS configuration has been migrated from the WezTerm framework to Kaku, replacing the previous wezterm.lua with a new kaku.lua that implements Kaku-specific settings and behaviors. Additionally, a minimal AppleScript dictionary (Kaku.sdef) has been added to the application resources, enabling basic scriptability such as quitting the app and retrieving its name and version.

assets/macos/Kaku.app/Contents/Resources · high confidence

Move Unicode names module to dedicated crate and suppress lint warnings

The Unicode names lookup logic has been relocated from the wezterm-gui source tree into a new standalone crate, crates/kaku-unicode-names, making it a reusable component independent of the GUI. Additionally, a clippy lint suppression for redundant static lifetimes has been added to the generated code to silence build warnings.

crates/kaku-unicode-names · high confidence

Per-pane terminal encoding support and split gutter configuration

The mux layer now supports configuring the character encoding for individual panes (UTF-8, GBK, GB18030, Big5, EUC-KR, and Shift-JIS), allowing correct display of non-ASCII text in terminals that use legacy encodings. Additionally, the split pane layout now respects a configurable \split\_pane\_gap\ setting, which inserts visual gutters between horizontally and vertically split panes to improve readability. SSH sessions are also standardized to use the \xterm-256color\ terminal type to ensure consistent rendering on remote servers.

mux/src · high confidence

Performance optimization for Lua table creation and iteration

The Lua helper library now pre-allocates capacity when creating Lua tables from Rust arrays and objects, reducing memory reallocations during data conversion. Additionally, the internal logic for detecting array-style tables has been refactored to use iterator zipping instead of manual index tracking, simplifying the code while maintaining the same behavior.

crates/luahelper · high confidence

Process info now distinguishes foreground process groups

The process information API now includes the process group ID (pgid) for each process, enabling callers to filter the process tree by group. A new \flatten\_to\_exe\_names\_in\_group\ method allows users to view only processes belonging to a specific group (such as the terminal's foreground job), effectively ignoring backgrounded daemons that share the same parent tree but belong to a different group.

crates/procinfo · high confidence

Rebrand default window class and application identity to Kaku

The default windowing system class and application identifier have been changed from 'org.wezfurlong.wezterm' to 'fun.tw93.kaku' (with documentation references also updated to 'sh.kaku.Kaku'). This affects how the terminal is identified by the OS window manager on X11 and Wayland, ensuring that all windows spawned by this instance—including error, update, and SSH authentication dialogs—are associated with the Kaku application rather than Wezterm.

crates/wezterm-gui-subcommands · high confidence

Rebrand from WezTerm to Kaku and improve macOS build robustness

The kaku-gui component has been renamed from WezTerm, updating Windows product metadata (company, description, name) in the build script to reflect the new Kaku identity. Additionally, the macOS build process has been hardened: it now explicitly links the UniformTypeIdentifiers framework, uses a more robust parent-traversal method to locate the target directory for Info.plist copying, and ensures the destination directory exists before the copy operation to prevent build failures.

kaku-gui · high confidence

Refactor debug attribute parsing in config derive macro

The parsing logic for the 'debug' attribute in the config derive macro has been refactored to use a more concise pattern match guard. This change simplifies the code structure without altering the functional behavior of how the debug flag is detected and processed.

config/derive · medium confidence

Refined confirmation overlays and search bar interaction

The confirmation dialogs for closing panes, tabs, windows, and applying updates now use clearer, action-oriented language (e.g., "Close this pane?" instead of "Really kill this pane?") and explicitly warn about the consequences. Closing a pane now correctly targets the pane's specific tab rather than the currently active tab, preventing accidental termination of the wrong pane if the user switches tabs while the prompt is open. The search bar in the copy overlay now supports selection extension and deletion, allowing users to highlight and remove parts of their search pattern. Additionally, the launcher has been updated to support closing tabs directly from the navigator.

kaku-gui/src/overlay · high confidence

Refinements to pane ID handling, notification performance, and lint compliance

The client now sorts active clients by last input time using a more idiomatic reverse-key approach, ensuring consistent window ordering. To improve performance, MuxNotification objects are passed by reference to subscribers rather than being cloned unnecessarily. The internal mapping between remote and local pane IDs has been corrected to use the proper PaneId type instead of TabId, fixing potential type mismatches in pane identification. Additionally, the spawn and split\_pane methods now accept the Mux instance as a parameter for better dependency management, and several Clippy lints have been suppressed to clean up the build output.

crates/wezterm-client/src · high confidence

Refinements to wezterm-dynamic derive macros and error handling

The wezterm-dynamic crate undergoes internal refactoring to align with modern Rust idioms and improve error reporting. The \Value\ enum now derives \Default\ directly instead of implementing it manually, and \PartialOrd\ for object keys is simplified to delegate to \cmp\. Error messages for invalid variants and unknown fields no longer use the \&\ reference syntax in their format strings. Additionally, the derive macro's internal method \from\_dynamic\ is renamed to \field\_from\_dynamic\, and the \FromDynamic\ implementation for \NotNan\<f64\>\ is streamlined. Test coverage is updated to reflect a field rename in the \Named\ enum and the adoption of the \From\ trait over \Into\ for struct and enum conversions.

crates/wezterm-dynamic · high confidence

Refines error handling in tabulate output conversion

The tabulate output function now uses the standard library's \std::io::Error::other\ constructor to wrap UTF-8 conversion errors, replacing the previous manual construction of an \Other\ kind error. This simplifies the error handling logic while maintaining the same user-facing behavior of reporting invalid UTF-8 sequences during table string generation.

crates/tabout · high confidence

Removal of dead code suppression in rate limiter

The \\#\[allow(dead\_code)\]\ attribute has been removed from the \non\_blocking\_admittance\_check\ method in the rate limiter library. This change cleans up the codebase by eliminating unnecessary compiler directives, indicating that the method is now considered active or its usage is managed differently, resulting in a cleaner public API surface for the rate limiting functionality.

crates/ratelim · medium confidence

Renamed terminal emulator terminfo entry from Wezterm to Kaku

The terminal description file previously named 'wezterm.terminfo' has been renamed to 'kaku.terminfo', and the internal identifier within the file has been updated from 'wezterm' to 'kaku'. This change reflects a rebranding or identity shift for the terminal emulator's terminfo data, ensuring that applications relying on this specific terminfo entry will now recognize the terminal as 'Kaku Terminal' instead of 'Wez's terminal emulator'.

termwiz/data · high confidence

Shell completions updated for Kaku with removed SSH/Serial commands

The shell completion scripts for Zsh and Fish have been renamed and updated to reflect the application's new identity as 'Kaku' (bundle identifier fun.tw93.kaku), replacing all previous references to 'wezterm'. Additionally, the completion definitions for the 'ssh' and 'serial' subcommands have been removed, aligning with the application's lightweight build that excludes these features.

assets/shell-completion · high confidence

Suppress Clippy warnings across Lua API crates

The Lua API library crates (battery, color-funcs, filesystem, logging, serde-funcs, share-data, spawn-funcs, and ssh-funcs) now include specific Clippy allow attributes to suppress warnings such as needless\_lifetimes, useless\_conversion, and manual\_unwrap\_or. This change resolves compiler warnings and ensures cleaner build output without altering the functional behavior of the Lua bindings.

(repo-wide) · high confidence

Suppress Clippy warnings in time functions library

The time functions library now explicitly allows specific Clippy lints (needless\_borrow and needless\_lifetimes) to resolve compiler warnings and ensure clean test compilation.

lua-api-crates/time-funcs · medium confidence

Suppress clippy warnings and fix test compilation

The LFU cache crate now suppresses specific clippy lints (assign\_op\_pattern, len\_without\_is\_empty, manual\_hash\_one, multiple\_bound\_locations) to resolve compilation warnings. Additionally, test helper functions for frequency and recency ordering have been updated to use lifetime elision, ensuring the test suite compiles correctly.

crates/lfucache · high confidence

Switch terminal rendering to Kaku-specific configuration

The terminal escape sequence generation now uses a renderer configured for the Kaku application instead of WezTerm. This involves renaming the internal renderer function to \new\_kaku\_terminfo\_renderer\ and updating the terminal capabilities to identify the program as "Kaku" rather than "WezTerm", ensuring that the output matches the expectations of the Kaku terminal environment.

lua-api-crates/termwiz-funcs · high confidence

macOS privacy entitlements added for camera and microphone access

The macOS build now includes a new entitlements file (Kaku.entitlements) that explicitly requests permissions for camera access, audio input (microphone), and automation of Apple events. This ensures the application can properly prompt users for these system resources on macOS without being blocked by privacy restrictions.

assets/macos · high confidence

Fixes

AI chat engine hardens security, compacts tool output, and adds prompt suggestions

The AI chat engine now enforces stricter security by requiring explicit user approval for shell commands and file reads that match credential-named patterns, while sanitizing tool arguments to prevent prompt injection. To manage context window usage, tool outputs are automatically compacted (capping lines and bytes for reads, searches, and shell execution) and older conversation history is folded into summaries when size thresholds are exceeded. Additionally, the engine now offers a prompt-suggestion feature that predicts the user's likely next message based on recent chat history.

_kaku-gui/src/ai\_chat\engine · high confidence

AI tools module restructured with hardened security and new capabilities

The \kaku-gui/src/ai\_tools\ module has been refactored into focused submodules (\fs\, \shell\, \web\, \search\, \project\, \soul\, \paths\, \registry\) to improve maintainability and auditability. Security has been significantly hardened: filesystem operations now enforce strict path validation to block access to sensitive locations (e.g., \.ssh\, \.env\, \/etc/shadow\) and credential files, and \fs\_patch\ is capped at 8MB to prevent memory exhaustion. Shell execution now supports \fish\ and includes safeguards against symlink-based path traversal for working directory updates. New capabilities include \web\_fetch\ summarization via a fast model, system proxy support for all HTTP tools, and clamped limits for \grep\_search\ and \symbol\_search\ to prevent unbounded resource usage.

_kaku-gui/src/ai\tools · high confidence

Fix emoji width calculation and simplify cell attribute defaults

The terminal now correctly renders emoji characters with the FE0F variation selector as double-width, preventing the visual issue where emojis appeared as tiny single-width glyphs. This change also refactors internal cell handling by replacing manual Default implementations with Rust's derive macro for ColorAttribute, SmallColor, and SemanticType, and simplifies image padding arguments in ImageCell construction.

crates/wezterm-cell · high confidence

The terminal now correctly handles hyperlinks that span multiple physical lines due to wrapping. Previously, hard newlines between rows could cause unrelated text to be incorrectly joined into a single hyperlink target, or conversely, valid wrapped URLs might be missed. The fix ensures that only lines explicitly marked as wrapped are joined for hyperlink scanning, preventing the fabrication of cross-command URLs while preserving the ability to click long URLs that visually wrap in the terminal.

crates/wezterm-surface/src/line · high confidence

Fix pane ID type in key-down events and suppress clippy warnings

The \SendKeyDown\ message now correctly uses \PaneId\ for its \pane\_id\ field instead of the previous \TabId\, ensuring that key events are routed to the specific pane rather than the broader tab. Additionally, several clippy warnings (such as \drop\_non\_drop\ and \large\_enum\_variant\) are suppressed in the library root to clean up compilation noise.

crates/codec · high confidence

Fixes clippy warnings in FreeType bindings

Updates the FreeType bindings to resolve Rust 1.93 clippy findings by allowing the missing\_safety\doc lint and correcting the Clone implementation for \\_BindgenUnionField to use \*self instead of Self::new().

deps/freetype · high confidence

Fixes for split-line alignment, tab bar spacing, and cursor rendering

This update resolves several visual rendering issues in the terminal window. Split lines now align precisely at intersections with gutter-aware boundary detection, preventing them from extending into the tab bar or window edges. The tab bar layout has been refined with adjusted horizontal and vertical padding, and fullscreen transitions are stabilized to prevent edge artifacts and double-painting. Additionally, block cursors are now correctly centered vertically when line height exceeds 1.0, and underlines are clipped to the visible content area to prevent overflow.

kaku-gui/src/termwindow/render · high confidence

Harden SSH authentication and SFTP file operations against panics

This update replaces unsafe \unwrap()\ calls with proper error handling in the SSH authentication flow and SFTP file operations, preventing crashes when authentication answers are unavailable or when the underlying file handle is closed. It also refactors the SFTP implementation to use a dedicated \IoFuture\ type alias, simplifies known\_hosts file selection to use the first available entry, and updates error construction to use \io::Error::other\ for better compatibility with recent Rust versions.

crates/wezterm-ssh/src · high confidence

Improved error handling and code safety in blob lease storage

The wezterm-blob-leases crate now handles potential path errors more robustly by replacing unsafe unwrap calls with proper error propagation, ensuring that missing parent directories in content paths result in descriptive I/O errors rather than panics. Additionally, the LeaseId type now implements the Default trait for easier initialization, and minor Rust idioms in storage retrieval have been updated for clarity.

crates/wezterm-blob-leases · high confidence

Improved font fallback stability and performance on macOS

The macOS font locator now caches parsed font information to avoid redundant parsing of font files, improving performance. It also fixes a crash by properly retaining autoreleased Objective-C arrays and excludes the '.LastResort' font from the fallback list to prevent hex-box rendering issues. Additionally, the CoreText font locator has been moved to the crates directory.

crates/wezterm-font/src/locator · high confidence

Users benefit from more reliable color customization, reduced memory usage, and more accurate hyperlink detection. The terminal now supports explicit foreground and background color overrides via a new configuration map, using integer-based RGB comparison to ensure consistent color replacement. Scrollback memory is now allocated incrementally rather than pre-allocating the full buffer, significantly reducing the initial memory footprint for new tabs. Additionally, hyperlink scanning logic has been hardened to only join rows when a specific terminal wrap attribute is present, preventing false positives where unrelated output is incorrectly merged into a single link. The viewport also handles rapid output and resize events more gracefully, preventing jarring jumps to the top of the screen.

term/src · high confidence

Open non-text documents in their default macOS apps

On macOS, clicking links to non-text files (such as PDFs, images, Office documents, and archives) now opens them in the system's default application instead of forcing them into the editor. This behavior is controlled by a new whitelist of file extensions defined in the \file\_link\ module, which uses the \/usr/bin/open\ command to launch the appropriate app.

kaku-gui/src/macos · high confidence

Simplified version detection by reading Cargo.toml directly

The build script for the wezterm-version crate now determines the application version by parsing the \version\ field from \kaku/Cargo.toml\ instead of relying on a \.tag\ file or git commit hashes. This change removes the dependency on the \git2\ crate for version extraction, simplifies the build logic, and ensures the reported version always reflects the value defined in the project manifest, defaulting to \0.1.0-unknown\ if the file is not found.

crates/wezterm-version · high confidence

Test coverage

Added shell integration smoke tests; Added unit tests for terminal core emulation and resize behavior; Updated SSH test suite and test infrastructure.

Dependencies

Kaku 0.21.0 release with remote support and dependency updates

This release updates the project to version 0.21.0 and introduces a new \kaku-remote\ crate for remote functionality, gated behind a \remote\ feature flag in \kaku\ and \kaku-gui\. The \kaku-gui\ manifest adds \kaku-ai-utils\ and \kaku-unicode-names\ as dependencies, while \kaku\ gains \crossterm\, \ratatui\, \rusqlite\, and \toml\_edit\. The workspace \Cargo.toml\ updates \git2\ to 0.21 with vendored OpenSSL, restricts \image\ to specific formats, and configures \wgpu\ for macOS Metal only. Several legacy crates (\strip-ansi-escapes\, \sync-color-schemes\, \wezterm-mux-server\) are removed, and the repository URL is updated to \github.com/tw93/Kaku\ across multiple manifests.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 69 → 66 (-3.2)
  • Rubric changed (rubric-2026.09.10 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 76 → 52 (-24.4)
  • Architecture 100 → 96 (-3.9)
  • Maturity 64 → 74 (+9.7)
  • Readiness 75 → 91 (+16.3)
  • Security 65 → 69 (+4.3)
  • Domain Modelling 91 → 92 (+1.6)
  • Event Sourcing 100 → 100 (+0.0)
  • Performance 97 (new)

Resolved (50)

  • AiClient::chat_step (cognitive 63) (kaku-gui/src/ai_client.rs)
  • AiClient::chat_step (cyclomatic 33) (kaku-gui/src/ai_client.rs)
  • Change coupling: ai_client.rs ↔ ai_conversations.rs (kaku-gui/src/ai_client.rs)
  • ClassTooLong: AiClient (kaku-gui/src/ai_client.rs)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no installation or build instructions (docs/cli.md)
  • Documentation: no usage examples (README.md)
  • Documentation: no usage examples (docs/cli.md)
  • Duplicated block (17 lines × 2) (kaku-gui/src/ai_client.rs)
  • Duplicated block (7 lines × 2) (kaku-gui/src/ai_client.rs)
  • Duplicated block (8 lines × 2) (kaku-gui/src/ai_client.rs)
  • Duplicated block (8 lines × 2) (kaku-gui/src/ai_client.rs)
  • Duplicated block (8 lines × 2) (kaku-gui/src/ai_client.rs)
  • Duplicated block (9 lines × 2) (kaku-gui/src/ai_client.rs)
  • Duplicated block (9 lines × 2) (kaku-gui/src/ai_client.rs)
  • FileTooLong: src/ai_client.rs (kaku-gui/src/ai_client.rs)
  • FunctionTooLong: kaku_gui::ai_client::parse_responses_sse (kaku-gui/src/ai_client.rs)
  • Hotspot: config/src/config.rs (config/src/config.rs)
  • Hotspot: config/src/lib.rs (config/src/lib.rs)
  • Hotspot: crates/wezterm-font/src/locator/core_text.rs (crates/wezterm-font/src/locator/core_text.rs)
  • …and 30 more

New (65)

  • AiClient::chat_step (cognitive 63) (kaku-gui/src/ai_client/mod.rs)
  • AiClient::chat_step (cyclomatic 33) (kaku-gui/src/ai_client/mod.rs)
  • Ambiguous naming for color manipulation. lighten and lighten_fixed suggest different behaviors (relative vs absolute), but the parameter names factor vs amount are not immediately clear without documentation. Similarly for saturate/saturate_fixed and adjust_hue_fixed/adjust_hue_fixed_ryb.
  • ClassTooLong: AiClient (kaku-gui/src/ai_client/mod.rs)
  • Documentation: no project overview (README.md)
  • Duplicated block (17 lines × 2) (kaku-gui/src/ai_client/mod.rs)
  • Duplicated block (7 lines × 2) (kaku-gui/src/ai_client/mod.rs)
  • Duplicated block (8 lines × 2) (kaku-gui/src/ai_client/mod.rs)
  • Duplicated block (8 lines × 2) (kaku-gui/src/ai_client/mod.rs)
  • Duplicated block (8 lines × 2) (kaku-gui/src/ai_client/responses.rs)
  • Duplicated block (9 lines × 2) (kaku-gui/src/ai_client/mod.rs)
  • Duplicated block (9 lines × 2) (kaku-gui/src/ai_client/responses.rs)
  • End-of-life runtime: Rust 1.95
  • FileTooLong: ai_client/mod.rs (kaku-gui/src/ai_client/mod.rs)
  • FileTooLong: ai_client/responses.rs (kaku-gui/src/ai_client/responses.rs)
  • FunctionTooLong: kaku_gui::ai_client::responses::parse_responses_sse (kaku-gui/src/ai_client/responses.rs)
  • Inconsistent naming for tuple conversions. to_tuple_rgb8 returns a raw tuple, while to_tuple_rgba returns a typed struct SrgbaTuple. This breaks the pattern of 'to_tuple_<type>' returning consistent types.
  • Inconsistent return types for linear-to-sRGB conversion. to_srgb returns SrgbaTuple (f32), while srgba_pixel returns SrgbaPixel (u8 struct). This forces the caller to know which intermediate type they need.
  • InlineThinkFilter::feed (cognitive 23) (kaku-gui/src/ai_client/think_filter.rs)
  • Low cohesion: Config (LCOM4 9) (config/src/config.rs)
  • …and 45 more

Changes since last survey

  • 30 commits — 21 feature/other, 9 fixes

By area

  • (root) — 8 commits
  • kaku-gui/src — 7 commits
  • kaku/src — 3 commits
  • .agents/skills — 2 commits
  • assets/macos — 2 commits
  • config/src — 2 commits
  • (repo) — 1 commit
  • .github/RELEASE_NOTES.md — 1 commit
  • .github/workflows — 1 commit
  • assets/shell-integration — 1 commit
  • docs/cli.md — 1 commit
  • scripts/release.sh — 1 commit

Notable commits

  • fix: Merge pull request #556 from TeamMeng/fix/split-tab-index
  • fix: fix(cli): prefer official Homebrew cask kaku
  • fix: fix(deps): bump rustls to 0.23.45 for RUSTSEC-2026-0285
  • fix: fix(gui): #558 offer Copy in the terminal context menu
  • fix: fix(gui): harden launcher teardown and guard menubar init
  • fix: fix(release): report an in-progress Security Audit run as such
  • fix: fix(session): #559 drop inline images before saving pane scrollback
  • fix: fix(tabbar): draw the tab index on split tabs
  • fix: fix(theme): deepen Kaku Light bright cyan to readable contrast
  • change: chore(release): prepare V0.21.0
  • change: chore: drop CLAUDE.md and let the AGENTS.md fallback carry it
  • change: chore: update contributors [skip ci]
  • change: chore: update contributors [skip ci]
  • change: ci: parallel build validation and leaner checks
  • change: docs(release): lead V0.21.0 notes with the official Homebrew cask
  • change: docs: correct padding, global hotkey, doctor and Smart Tab facts
  • change: docs: fix the macOS symbol, the prompt predicate scope and two decisions
  • change: docs: import AGENTS.md so its rules actually reach Claude Code
  • change: docs: point product-docs skill at the compare page
  • change: docs: point the README at kaku.fun and the compare page
  • …and 10 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

tw93/Kaku was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 3859669ad8e18459337b44970494e16cff6a832f — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-5ff527f25b99.