Langsung ke konten utama
Jadikan Claude Code milik Anda sendiri dengan baris status khusus yang ditampilkan di bagian bawah antarmuka Claude Code, mirip dengan cara prompt terminal (PS1) bekerja di shell seperti Oh-my-zsh.

Buat baris status khusus

Anda dapat:
  • Jalankan /statusline untuk meminta Claude Code membantu Anda menyiapkan baris status khusus. Secara default, Claude Code akan mencoba mereproduksi prompt terminal Anda, tetapi Anda dapat memberikan instruksi tambahan tentang perilaku yang Anda inginkan ke Claude Code, seperti /statusline show the model name in orange
  • Langsung tambahkan perintah statusLine ke .claude/settings.json Anda:
{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh",
    "padding": 0 // Opsional: atur ke 0 untuk membiarkan baris status mencapai tepi
  }
}

Cara Kerjanya

  • Baris status diperbarui ketika pesan percakapan diperbarui
  • Pembaruan berjalan paling banyak setiap 300ms
  • Baris pertama dari stdout dari perintah Anda menjadi teks baris status
  • Kode warna ANSI didukung untuk menata gaya baris status Anda
  • Claude Code meneruskan informasi kontekstual tentang sesi saat ini (model, direktori, dll.) sebagai JSON ke skrip Anda melalui stdin

Struktur Input JSON

Perintah baris status Anda menerima data terstruktur melalui stdin dalam format JSON:
{
  "hook_event_name": "Status",
  "session_id": "abc123...",
  "transcript_path": "/path/to/transcript.json",
  "cwd": "/current/working/directory",
  "model": {
    "id": "claude-opus-4-1",
    "display_name": "Opus"
  },
  "workspace": {
    "current_dir": "/current/working/directory",
    "project_dir": "/original/project/directory"
  },
  "version": "1.0.80",
  "output_style": {
    "name": "default"
  },
  "cost": {
    "total_cost_usd": 0.01234,
    "total_duration_ms": 45000,
    "total_api_duration_ms": 2300,
    "total_lines_added": 156,
    "total_lines_removed": 23
  }
}

Skrip Contoh

Baris Status Sederhana

#!/bin/bash
# Baca input JSON dari stdin
input=$(cat)

# Ekstrak nilai menggunakan jq
MODEL_DISPLAY=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')

echo "[$MODEL_DISPLAY] 📁 ${CURRENT_DIR##*/}"

Baris Status Sadar Git

#!/bin/bash
# Baca input JSON dari stdin
input=$(cat)

# Ekstrak nilai menggunakan jq
MODEL_DISPLAY=$(echo "$input" | jq -r '.model.display_name')
CURRENT_DIR=$(echo "$input" | jq -r '.workspace.current_dir')

# Tampilkan cabang git jika berada di repo git
GIT_BRANCH=""
if git rev-parse --git-dir > /dev/null 2>&1; then
    BRANCH=$(git branch --show-current 2>/dev/null)
    if [ -n "$BRANCH" ]; then
        GIT_BRANCH=" | 🌿 $BRANCH"
    fi
fi

echo "[$MODEL_DISPLAY] 📁 ${CURRENT_DIR##*/}$GIT_BRANCH"

Contoh Python

#!/usr/bin/env python3
import json
import sys
import os

# Baca JSON dari stdin
data = json.load(sys.stdin)

# Ekstrak nilai
model = data['model']['display_name']
current_dir = os.path.basename(data['workspace']['current_dir'])

# Periksa cabang git
git_branch = ""
if os.path.exists('.git'):
    try:
        with open('.git/HEAD', 'r') as f:
            ref = f.read().strip()
            if ref.startswith('ref: refs/heads/'):
                git_branch = f" | 🌿 {ref.replace('ref: refs/heads/', '')}"
    except:
        pass

print(f"[{model}] 📁 {current_dir}{git_branch}")

Contoh Node.js

#!/usr/bin/env node

const fs = require('fs');
const path = require('path');

// Baca JSON dari stdin
let input = '';
process.stdin.on('data', chunk => input += chunk);
process.stdin.on('end', () => {
    const data = JSON.parse(input);
    
    // Ekstrak nilai
    const model = data.model.display_name;
    const currentDir = path.basename(data.workspace.current_dir);
    
    // Periksa cabang git
    let gitBranch = '';
    try {
        const headContent = fs.readFileSync('.git/HEAD', 'utf8').trim();
        if (headContent.startsWith('ref: refs/heads/')) {
            gitBranch = ` | 🌿 ${headContent.replace('ref: refs/heads/', '')}`;
        }
    } catch (e) {
        // Bukan repo git atau tidak dapat membaca HEAD
    }
    
    console.log(`[${model}] 📁 ${currentDir}${gitBranch}`);
});

Pendekatan Fungsi Pembantu

Untuk skrip bash yang lebih kompleks, Anda dapat membuat fungsi pembantu:
#!/bin/bash
# Baca input JSON sekali
input=$(cat)

# Fungsi pembantu untuk ekstraksi umum
get_model_name() { echo "$input" | jq -r '.model.display_name'; }
get_current_dir() { echo "$input" | jq -r '.workspace.current_dir'; }
get_project_dir() { echo "$input" | jq -r '.workspace.project_dir'; }
get_version() { echo "$input" | jq -r '.version'; }
get_cost() { echo "$input" | jq -r '.cost.total_cost_usd'; }
get_duration() { echo "$input" | jq -r '.cost.total_duration_ms'; }
get_lines_added() { echo "$input" | jq -r '.cost.total_lines_added'; }
get_lines_removed() { echo "$input" | jq -r '.cost.total_lines_removed'; }

# Gunakan pembantu
MODEL=$(get_model_name)
DIR=$(get_current_dir)
echo "[$MODEL] 📁 ${DIR##*/}"

Tips

  • Jaga baris status Anda tetap ringkas - harus sesuai dalam satu baris
  • Gunakan emoji (jika terminal Anda mendukungnya) dan warna untuk membuat informasi mudah dipindai
  • Gunakan jq untuk penguraian JSON di Bash (lihat contoh di atas)
  • Uji skrip Anda dengan menjalankannya secara manual dengan input JSON tiruan: echo '{"model":{"display_name":"Test"},"workspace":{"current_dir":"/test"}}' | ./statusline.sh
  • Pertimbangkan untuk menyimpan operasi yang mahal (seperti status git) jika diperlukan

Pemecahan Masalah

  • Jika baris status Anda tidak muncul, periksa bahwa skrip Anda dapat dieksekusi (chmod +x)
  • Pastikan skrip Anda menampilkan ke stdout (bukan stderr)