Built for many windows

A small, focused terminal. No tabs, no plugins, no setup.

A color for every window

Switch a window's background with Cmd+Shift+]. Eight presets drawn from traditional Japanese colors, plus your own in a JSON file.

Knows when your agent needs you

A glowing bar shows whether Claude Code or Codex CLI is thinking, running a tool or waiting for you. Waiting windows get a Dock badge.

Runs your TUI apps

vim, less, htop, tmux, Claude Code and Codex CLI work as expected. Lines rewrap, history included, when you resize.

Japanese input done right

Inline IME composition, full-width characters and emoji render in place. The interface is available in English and Japanese.

One window, one session

Each window is its own shell. kTerm opens at the position and size you last used, and background windows can turn translucent so the front one stands out.

Under 1 MB, no dependencies

Terminal emulation is written from scratch with no third-party libraries. No account, no telemetry, and kTerm itself never connects to the network.

Claude Code and Codex CLI activity

The bar along the top of the window and the label in the title bar follow your agent. When you are in another app, the Dock icon bounces once as soon as a window starts waiting for you.

StateBarLabel
ThinkingBlue light flows left to rightThinking
Running a toolTeal light flowsTool name (Bash, Edit...)
Waiting for youBlinking amberWaiting for You
DoneGreen, then fadesDone
FailedRedFailed

Set it up

  1. Download claude-code-activity.sh, save it to ~/.claude/hooks/ and make it executable with chmod +x.
  2. Register it for each event in ~/.claude/settings.json (Claude Code) or ~/.codex/hooks.json (Codex CLI 0.155 or later), replacing <you> with your user name.
  3. For Codex CLI, start it once in interactive mode and choose "Trust all and continue". Hooks do not run until they are trusted.
Claude Code - ~/.claude/settings.json
{
  "hooks": {
    "SessionStart":      [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "UserPromptSubmit":  [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "PreToolUse":        [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "PostToolUse":       [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "PermissionRequest": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "Notification":      [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "Stop":              [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "StopFailure":       [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "SessionEnd":        [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }]
  }
}
Codex CLI - ~/.codex/hooks.json
{
  "hooks": {
    "SessionStart":      [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "UserPromptSubmit":  [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "PreToolUse":        [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "PostToolUse":       [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "PermissionRequest": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "Stop":              [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "Interrupt":         [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
    "SessionEnd":        [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }]
  }
}
Report state from your own program

Write these sequences to standard output. Inside hooks, which have no controlling terminal, write to the device path in $KTERM_TTY. It also works through tmux or ssh as long as KTERM_TTY is carried over.

printf '\e]7777;activity;busy;\e\\'         # Thinking
printf '\e]7777;activity;tool;Bash\e\\'     # Running a tool (with label)
printf '\e]7777;activity;attention;\e\\'    # Waiting for you
printf '\e]7777;activity;done;\e\\'         # Done
printf '\e]7777;activity;error;\e\\'        # Failed
printf '\e]7777;activity;off;\e\\'          # Off
Completion sounds (terminal bell)

kTerm plays the bell with the sound and volume chosen in Settings, and wakes Bluetooth outputs first so the start of the sound is not cut off. For Claude Code, set "preferredNotifChannel": "terminal_bell" in ~/.claude/settings.json. For Codex CLI, add this to ~/.codex/config.toml:

[tui]
notifications = true
notification_method = "bel"
notification_condition = "always"

Keyboard shortcuts

Cmd+Shift+] / [Next / previous background color (this window only)
Cmd+NNew window
Cmd+WClose window and end its session
Cmd+KClear the screen and scrollback
Cmd++ / - / 0Larger / smaller / reset font size of this window
Cmd+ / Beginning / end of line
Option+ / Move by word
Shift+PageUp / PageDownPage through the scrollback
DragSelect and copy in one step
Right-clickPaste
Cmd+,Settings: font, line spacing, default color, scrollback, Option as Meta, bell, background window opacity

Add or override colors in ~/Library/Application Support/kTerm/themes.json. Changes apply as soon as you save; "Show in Finder" in Settings creates a template.

Install

  1. Download kTerm-1.0.3.dmg and open it.
  2. Drag kTerm to the Applications folder.
  3. Open kTerm from Applications or Spotlight.

kTerm is signed with a Kodama & Co. Developer ID and notarized by Apple, so macOS opens it after a single "downloaded from the internet" confirmation. No security workarounds are needed.

Uninstall

Move kTerm to the Trash. To remove your settings and custom colors as well, delete ~/Library/Preferences/com.kodama.kTerm.plist and ~/Library/Application Support/kTerm.

Releases

VersionReleasedDownload
1.0.3 Sep 23, 2026 kTerm-1.0.3.dmg (570 KB)
SHA-256 cdcd5fc91e5082109a0387eef1c57f60908b5bbe90fcc1a7f166986d5c47f3a1

Verify a download in Terminal:

shasum -a 256 ~/Downloads/kTerm-1.0.3.dmg
Requirements
macOS 14 Sonoma or later
Architecture
Universal (Apple Silicon and Intel)
Price
Free
Languages
English, Japanese
License
kTerm License - free for personal and business use; redistribution allowed unmodified and free of charge
Publisher
Kodama & Company, Inc.

Give each window its own color

Free for macOS 14 Sonoma or later. Questions or bug reports? Contact us.

Download kTerm 1.0.3

Use of kTerm is subject to the kTerm License, our Terms of Use and Application Privacy Policy.