MoonshotAI / MoonshotAI/kimi-cli

RFC: user-customizable color skins via YAML (~/.kimi/skins/)

Open
#2,171 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
11.4k
Forks
1.3k
Avg merge
9h 47m
Merged PRs (30d)
2

Description

Problem

The current /theme command offers two built-in palettes (dark / light). There's no way for users to define their own color scheme without patching source code. Power users running custom terminals, branded environments, or accessibility-tuned setups have nowhere to go.

Proposed solution

Add a YAML-based skin system that lets users drop a file into ~/.kimi/skins/<name>.yaml and activate it with /skin <name> or skin = "<name>" in config.toml.

Key design decisions:

  • Hermes-compatible format — same colors: / branding: / font: structure, so skins are portable across compatible tools
  • Backwards-compatible/theme dark|light still works; get_active_theme() returns "dark" for custom skins so no existing callers break
  • Graceful fallback — any token omitted from the YAML falls back to the dark-theme default, so a minimal skin file is just a few lines
  • Zero new dependenciespyyaml is already in the dependency tree

Example skin file

name: dracula
description: Dracula color scheme
colors:
  diff_add_bg: "#1e3a2e"
  diff_del_bg: "#3a1e2e"
  mcp_connected: "#50fa7b"
  toolbar_yolo: "#ff79c6"
branding:
  prompt_symbol: "❯"
font:
  primary: "Fira Code"

Implementation

A working implementation is ready in PR #2170. It includes:

  • Rewritten theme.py with Skin / SkinColors / SkinBranding dataclasses
  • _load_yaml_skin() and _discover_custom_skins() for filesystem loading
  • /skin slash command (list / switch)
  • skin field in config.py
  • 50 passing tests covering all code paths
  • EN + ZH documentation

Happy to adjust the design based on feedback before merge — opening this issue to start the conversation per the contribution guidelines.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing PR #2170, which contains the working implementation described in this RFC. Inspect theme.py, config.py, the 50 associated tests, and the EN/ZH documentation; the work is complete when custom YAML skins, /skin switching, configuration support, fallback behavior, and compatibility requirements are covered and the tests pass.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
cli
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.