← 返回提示词库
AI 编程 #简短 难度:入门

Claude 代码状态栏设计

Claude Code Statusline Design

# 任务:为 Claude Code 创建专业开发者状态栏 ## 角色 你是一名系统程序员,正在为 Claude Code 创建一个高度优化的状态栏脚本。 ## 交付物 一个单文件...

适用平台: ChatGPTClaudeGemini
# 任务:为 Claude Code 创建一个专业的开发者状态栏

## 角色

您是一名系统程序员,正在为 Claude Code 创建一个高度优化的状态栏脚本。

## 交付物

一个单文件 Python 脚本 (`~/.claude/statusline.py`),用于在 Claude Code 的状态行中显示开发者关键信息。

## 输入规范

从 stdin 读取 JSON,其结构如下:

```json
{
  "model": {"display_name": "Opus|Sonnet|Haiku"},
  "workspace": {"current_dir": "/path/to/workspace", "project_dir": "/path/to/project"},
  "output_style": {"name": "explanatory|default|concise"},
  "cost": {
    "total_cost_usd": 0.0,
    "total_duration_ms": 0,
    "total_api_duration_ms": 0,
    "total_lines_added": 0,
    "total_lines_removed": 0
  }
}

```

## 输出要求

### 格式

* 仅向 stdout 打印一行
* 使用 ANSI 256 色码:\033[38;5;Nm,采用优化后的高对比度调色板
* 智能截断:可见文本宽度 ≤ 80 字符(ANSI 转义码不计入限制)
* 使用 Unicode 符号:● (干净), + (新增), ~ (修改)
* 调色板:橙色 208,蓝色 33,绿色 154,黄色 229,红色 196,灰色 245 (已在深色/浅色终端测试)

### 信息架构 (从左到右优先级)

1. 核心:模型名称 (橙色)
2. 上下文:项目目录 basename (蓝色)
3. Git 状态:
* 分支名称 (绿色)
* 干净:● (暗灰色)
* 已修改:~N (黄色,N = 文件数量)
* 已添加:+N (黄色,N = 文件数量)


4. 元数据 (暗灰色):
* 未提交文件:!N (红色,N = git status --porcelain 的计数)
* API 比例:A:N% (N = api_duration / total_duration * 100)



### 输出示例

\033[38;5;208mOpus\033[0m \033[38;5;33mIsaacLab\033[0m \033[38;5;154mmain\033[0m \033[38;5;245m●\033[0m \033[38;5;245mA:12%\033[0m

## 技术限制

### 性能 (关键)

* 执行时间:< 100ms (每 300ms 调用一次)
* 缓存持久性:将 Git 状态缓存存储在 /tmp/claude_statusline_cache.json 中 (脚本每次运行后退出,因此缓存必须持久化到磁盘)
* 缓存 TTL:仅当缓存时间 > 5 秒或 .git/index mtime 改变时才刷新 Git 文件计数
* Git 逻辑优化:
* 分支名称:直接读取 .git/HEAD (不使用子进程)
* 文件计数:仅当缓存过期时才调用 subprocess.run(['git', 'status', '--porcelain'])


* 仅限标准库:无外部依赖 (仅使用 sys, json, os, pathlib, subprocess, time)

### 错误处理

* JSON 解析错误 → 返回空字符串 ""
* 缺少字段 → 省略该部分 (不崩溃)
* 未找到 Git 目录 → 完全省略 Git 部分
* 任何异常 → 返回空字符串 ""

## 代码结构

* 单文件,< 100 行
* 处理 UTF-8 编码以实现健壮的 Unicode 输出
* 每个关注点最多一个函数 (解析、git、格式化)
* 所有函数都需要类型提示
* 每个函数都有 docstring 解释其目的

## 集成步骤

1. 将脚本保存到 ~/.claude/statusline.py
2. 运行 chmod +x ~/.claude/statusline.py
3. 添加到 ~/.claude/settings.json:

```json
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.py",
    "padding": 0
  }
}

```

4. 手动测试:echo '{"model":{"display_name":"Test"},"workspace":{"current_dir":"/tmp"}}' | ~/.claude/statusline.py

## 验证清单

* 脚本在没有外部依赖的情况下执行 (除了缓存时对 git status --porcelain 的单次调用)
* 可见文本宽度 ≤ 80 字符 (ANSI 代码不计入计算)
* 颜色在深色和浅色终端背景下均正确渲染
* 在典型工作区中执行时间 < 100ms (缓存调用应 < 20ms)
* 优雅地处理缺少 Git 仓库的情况
* 缓存文件在 /tmp 中创建并遵守 TTL
* 当 .git/index mtime 改变或 5 秒过去时,Git 文件计数会刷新

## 决策背景

这是一个“开发者专业”风格的状态栏。它优先考虑:

* 详细的 Git 信息,以便了解分支切换
* API 效率监控,用于注重成本的开发
* 视觉密度,以实现每字符最大信息量