SSD Nodes Learn Hosting plans →
கல்வி வழிகாட்டிகள் Matt Connorஆல் Matt Connor · புதுப்பிக்கப்பட்டது 2026-08-30

Claude Code statusline அமைப்பது எப்படி?

Claude Code-ல் statusLine அமைப்பதன் மூலம் VPS-ல் hostname, directory மற்றும் git branch தகவல்களைப் பெறலாம். தவறான server-ல் மாற்றங்கள் செய்வதைத் தவிர்க்க இந்த எளிய வழிமுறை உதவும்.

Claude Code statusline எதைக் காட்டுகிறது

Claude Code statusline என்பது prompt-க்கு கீழே உள்ள ஒரு வரி ஆகும். இது நீங்கள் எழுதும் script-ன் வெளியீட்டைக் காட்டுகிறது. நீங்கள் ஒரு statusLine block-ஐ settings.json-ல் சேர்த்து, அதை ஒரு command-ஐ நோக்கிச் சுட்டிக்காட்ட வேண்டும். Claude Code அந்த command-ஐ இயக்கி, session-ன் நிலையை JSON வடிவில் standard input வழியாக அதற்கு அனுப்பும். அந்த command standard output-ல் எதை எழுதுகிறதோ, அதை அது அச்சிடும்.

இதுவே முழு ஒப்பந்தம். உங்கள் script stdin-ல் JSON-ஐப் படித்து, stdout-ல் உரையை அச்சிடுகிறது. இது உங்கள் கணினியில் இயங்குகிறது. அது அச்சிடும் எதுவும் model-க்கு அனுப்பப்படுவதில்லை, எனவே இதற்கு tokens செலவாகாது.

ஒரு project-ஐக் கொண்ட laptop-ல் இது ஒரு அலங்காரம் மட்டுமே. ஆனால் மூன்று server-களில் இது ஒரு பாதுகாப்பு அரண். ஒவ்வொரு terminal-லும் Claude Code session ஒரே மாதிரியாகவே இருக்கும். எனவே, பெயரிடப்படாத நான்கு SSH windows-களைப் பயன்படுத்தும்போது, ஒரு migration தவறான server-ல் முடிவதற்கு வாய்ப்புள்ளது. hostname-ல் தொடங்கும் ஒரு statusline, இத்தகைய தவறுகளைத் தவிர்க்க உதவும்.

settings.json கோப்பில் statusLine அமைப்பு எங்குள்ளது

இதை உங்கள் பயனர் அமைப்புகளில் ~/.claude/settings.json-ல் சேர்க்கவும், இது அந்த கணினியில் உள்ள அனைத்து திட்டங்களுக்கும் பொருந்தும். ஒரு களஞ்சியத்திற்குள் (repository) உள்ள .claude/settings.json திட்ட அமைப்புகளும் வேலை செய்யும், மேலும் அந்த கோப்பகத்திற்கு அவை முன்னுரிமை பெறும்.

{
  "statusLine": {
    "type": "command",
    "command": "~/.claude/statusline.sh"
  }
}

type எப்போதும் "command" ஆக இருக்கும். command மதிப்பு ஒரு shell வழியாக இயங்கும், எனவே இது ஒரு script பாதையாகவோ அல்லது சாதாரண கட்டளையாகவோ இருக்கலாம். எந்தவொரு script-ஐயும் எழுதும் முன், இணைப்பு சரியாக வேலை செய்கிறதா என்பதைச் சரிபார்க்கவும்:

{
  "statusLine": {
    "type": "command",
    "command": "hostname -s"
  }
}

Claude Code-ஐத் தொடங்கி ஒரு செய்தியை அனுப்பவும். இப்போது prompt-க்கு கீழே உள்ள பட்டியில் server-ன் குறுகிய hostname தெரியும். அது காலியாக இருந்தால், உங்கள் script-ல் சிக்கல் இல்லை, அமைப்பிலோ அல்லது trust உரையாடல் பெட்டியிலோதான் சிக்கல் உள்ளது. கீழே உள்ள "statusline ஏன் காலியாக உள்ளது" என்பதைப் படிக்கவும்.

ஆகஸ்ட் 2026 நிலவரப்படி மூன்று விருப்பத்தேர்வு விசைகள் உள்ளன. padding எழுத்துக்களில் கிடைமட்ட இடைவெளியைச் சேர்க்கிறது மற்றும் அதன் இயல்புநிலை 0 ஆகும். refreshInterval சாதாரண தூண்டுதல்களுக்கு (triggers) மேலதிகமாக, ஒவ்வொரு N வினாடிகளுக்கும் கட்டளையை மீண்டும் இயக்குகிறது, இதன் குறைந்தபட்ச அளவு 1 ஆகும். அமர்வு செயலற்ற நிலையில் இருக்கும்போது கடிகாரம் அல்லது மாறும் தகவலைக் காட்ட விரும்பினால் மட்டுமே இதைப் பயன்படுத்தவும். hideVimModeIndicator உங்கள் சொந்த script ஏற்கனவே vim mode-ஐக் காட்டும்போது, உள்ளமைக்கப்பட்ட -- INSERT -- உரையை மறைக்கிறது.

statusline script என்னென்ன தரவுகளைப் பெறுகிறது?

இந்த பக்கம் உட்பட, நீங்கள் எங்கு படிக்கும் field பட்டியலையும் அப்படியே நம்ப வேண்டாம். உங்கள் பதிப்பு அனுப்பும் உண்மையான object-ஐ capture செய்யுங்கள். stdin-ஐ ஒரு கோப்பில் சேமிக்கும் ஒரு தற்காலிக script-ஐ எழுதுங்கள்:

cat > ~/.claude/statusline-capture.sh <<'EOF'
#!/bin/bash
cat > /tmp/statusline-input.json
echo "captured"
EOF
chmod +x ~/.claude/statusline-capture.sh

statusLine.command-ஐ அந்தக் கோப்பிற்குச் சுட்டிக்காட்டி, ஒரு session-ஐத் தொடங்கி, ஒரு செய்தியை அனுப்புங்கள். அந்த bar captured-ஐ வாசிக்கும். இப்போது என்ன வந்திருக்கிறது என்று பாருங்கள்:

jq . /tmp/statusline-input.json

உங்கள் build-க்கான துல்லியமான வடிவம் உங்களிடம் உள்ளது. ஒரு update எதையாவது மாற்றும்போதெல்லாம் இதை நீங்கள் மீண்டும் செய்யலாம்.

ஆகஸ்ட் 2026-ல் ஆவணப்படுத்தப்பட்டபடி, நிலையான பகுதிகள் flat keys-ஆக இல்லாமல், nested objects-ஆக உள்ளன. model என்பது id மற்றும் display_name-ஐக் கொண்டுள்ளது. workspace என்பது current_dir மற்றும் project_dir-ஐக் கொண்டுள்ளது: current_dir என்பது session தற்போது இருக்கும் இடம், project_dir என்பது அது தொடங்கப்பட்ட இடம். working directory session-க்கு இடையில் மாறும்போது இவை இரண்டும் மாறுபடும். மேல்மட்டத்திலுள்ள cwd, workspace.current_dir-ன் அதே மதிப்பைக் கொண்டுள்ளது. context_window என்பது token எண்ணிக்கையையும், முன்கூட்டியே கணக்கிடப்பட்ட used_percentage-ஐயும் கொண்டுள்ளது. cost என்பது total_cost_usd மற்றும் கால அளவு counters-ஐக் கொண்டுள்ளது. session_id என்பது session-ன் வாழ்நாள் முழுவதும் நிலையானது மற்றும் ஒவ்வொரு session-க்கும் தனித்துவமானது; இது பிற்காலத்தில் caching செய்வதற்கு முக்கியமானது.

schema மாற்றங்களின்போதும் ஒரு script-ஐச் செயல்பட வைக்கும் மூன்று விதிகள் இங்கே உள்ளன:

சில keys இருக்காது, null-ஆக இருக்காது. vim, agent, pr, worktree மற்றும் effort ஆகியவை அந்தந்த அம்சம் active-ல் இருக்கும்போது மட்டுமே தோன்றும். vim mode off-ல் இருக்கும்போது jq -r கொண்டு .vim.mode-ஐ வாசித்தால், அது null என்ற literal string-ஐ அச்சிடும், உங்கள் bar வாசகருக்கு null-ஐக் காட்டும். ஒவ்வொரு selector-உடனும் // empty-ஐச் சேர்க்கவும், அப்போதுதான் விடுபட்ட key எதையும் அச்சிடாது.

சில மதிப்புகள் ஆரம்பத்தில் null-ஆக இருக்கும். முதல் API response-க்கு முன்பு context_window.used_percentage மற்றும் context_window.current_usage ஆகியவை null-ஆக இருக்கும். அடுத்த அழைப்பு அதை மீண்டும் நிரப்பும் வரை, /compact-க்குப் பிறகு current_usage மீண்டும் null-ஆக மாறும். எனவே, bar-ல் உள்ள context percentage-க்கு // 0 தேவை, இல்லையெனில் ஒவ்வொரு session-ன் முதல் சில வினாடிகளுக்கு அது null என்று காட்டும். அந்த எண்ணை bar-ல் வைப்பதற்கு முன், context window உண்மையில் எப்படி நிரம்புகிறது என்பதைத் தெரிந்துகொள்வது உதவும்.

git branch JSON-ல் இல்லை. எந்த field-உம் அதைத் தெரிவிப்பதில்லை. உங்கள் bar-ல் உள்ள எந்த branch-உம், உங்கள் script-ஆல் இயக்கப்படும் git மூலமே கிடைக்கிறது.

முறிந்து போகாமல் தரம் குறையும் ஒரு statusline script

இது நகலெடுத்துப் பயன்படுத்தக்கூடிய பதிப்பாகும். இது hostname, working directory, git branch மற்றும் model name ஆகியவற்றை அச்சிடுகிறது. ஒவ்வொரு புலத்திற்கும் ஒரு fallback இருப்பதால், காலியான JSON object கூட பயன்படுத்தக்கூடிய ஒரு வரியை உருவாக்கும்.

#!/bin/bash
# ~/.claude/statusline.sh
input=$(cat)

# Read one field. Prints nothing when the key is missing or null.
field() { printf '%s' "$input" | jq -r "$1 // empty" 2>/dev/null; }

HOST=$(hostname -s 2>/dev/null)
[ -z "$HOST" ] && HOST="host"

DIR=$(field '.workspace.current_dir')
[ -z "$DIR" ] && DIR=$(field '.cwd')
[ -z "$DIR" ] && DIR="$PWD"

MODEL=$(field '.model.display_name')
[ -z "$MODEL" ] && MODEL="claude"

SHORT="$DIR"
if [ -n "$HOME" ]; then
  case "$DIR" in
    "$HOME") SHORT="~" ;;
    "$HOME"/*) SHORT="~/${DIR#"$HOME"/}" ;;
  esac
fi

BRANCH=""
if git -C "$DIR" rev-parse --git-dir >/dev/null 2>&1; then
  BRANCH=$(git -C "$DIR" branch --show-current 2>/dev/null)
  [ -z "$BRANCH" ] && BRANCH="detached"
fi

CYAN=$'\033[36m'
YELLOW=$'\033[33m'
DIM=$'\033[2m'
RESET=$'\033[0m'

LINE="${CYAN}${HOST}${RESET} ${SHORT}"
[ -n "$BRANCH" ] && LINE="${LINE} ${YELLOW}${BRANCH}${RESET}"
LINE="${LINE} ${DIM}${MODEL}${RESET}"

printf '%s\n' "$LINE"

ஒவ்வொரு வாசிப்பும் field வழியாகச் செல்கிறது, இது // empty-ஐச் சேர்க்கிறது. எனவே, பெயர் மாற்றப்பட்ட அல்லது நீக்கப்பட்ட ஒரு key காலியான string-ஐ உருவாக்குகிறது, மேலும் அடுத்த வரி ஒரு default மதிப்பை வழங்குகிறது. Directory-ஆனது workspace.current_dir-லிருந்து cwd-க்கு, பின் $PWD-க்கு என fallback ஆகிறது. Branch-ஆனது வெறும் git-க்கு பதிலாக git -C "$DIR"-லிருந்து வருகிறது, எனவே bar காட்டும் directory-க்கு ஏற்ப branch எப்போதும் சரியாக அமையும்.

இதைச் சேமித்து, பின் executable ஆக மாற்றவும்:

chmod +x ~/.claude/statusline.sh

Execute bit என்பது விருப்பத்திற்குரியது அல்ல. Claude Code இந்த command-ஐ ஒரு shell வழியாக இயக்குகிறது. எனவே, +x இல்லாத ஒரு script Permission denied பிழையுடன் தோல்வியடையும், stdout எதையும் உருவாக்காது, மேலும் எந்தத் தெளிவான பிழையும் இன்றி அந்த வரி காலியாகவே இருக்கும்.

jq command line-ல் JSON-ஐப் பகுப்பாய்வு (parse) செய்கிறது, இது புதிய Ubuntu server-ல் நிறுவப்பட்டிருக்காது:

sudo apt update && sudo apt install -y jq

பின், மேலே உள்ள முதல் settings.json தொகுதியைப் பயன்படுத்தி, அந்த setting-ஐ script-ஐ நோக்கிச் சுட்டிக்காட்டவும்.

ஸ்கிரிப்டை நம்புவதற்கு முன் அதைச் சோதிக்கவும்

இதை இரண்டு முறை கைமுறையாக இயக்கவும். முதலில் ஒரு சாதாரண session object-உடன்:

echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/srv/api"},"session_id":"t1"}' | ~/.claude/statusline.sh

உங்களுக்கு hostname கிடைக்கும், அதைத் தொடர்ந்து /srv/api, பிறகு Opus. எந்த branch-உம் தோன்றாது, ஏனெனில் உங்கள் கணினியில் உள்ள /srv/api ஒரு git repository-ஆக இருக்க வாய்ப்பில்லை.

இரண்டாவதாக, degradation சோதனை; இதைத்தான் பெரும்பாலானோர் தவிர்க்கிறார்கள்:

echo '{}' | ~/.claude/statusline.sh

ஒரு empty object என்பது schema மாற்றத்தால் உங்களுக்கு ஏற்படக்கூடிய மிக மோசமான சூழலாகும். இந்த வரி இன்னும் அச்சிடுகிறது: hostname, $PWD-லிருந்து தற்போதைய directory, மற்றும் model பெயர் இருக்க வேண்டிய இடத்தில் claude என்ற சொல். எதுவும் crash ஆகாது மற்றும் எதுவும் null என்று அச்சிடாது. இந்தச் சோதனையில் தேர்ச்சி பெறும் ஒரு ஸ்கிரிப்ட், ஒரு field பெயர் மாற்றப்பட்டாலும் பிழைக்காது, ஏனெனில் உங்கள் ஸ்கிரிப்டைப் பொறுத்தவரை, பெயர் மாற்றப்பட்ட field-ம் விடுபட்ட field-ம் ஒரே நிகழ்வுதான்.

நீங்கள் காண வேண்டியவை

Statusline, உள்ளமைக்கப்பட்ட footer badges-க்கு மேலே தனி வரிசையில் தோன்றும்; அவை மாற்றப்படாது. சரியாக இயங்கும் அமைப்பில் இது ஒரே வரிசையாக இருக்கும்: cyan நிறத்தில் சிறிய hostname, பின் உங்கள் home directory-ஐ ~ எனச் சுருக்கிய working directory, directory ஒரு git repository-ஆக இருந்தால் மஞ்சள் நிறத்தில் branch பெயர், இறுதியில் மங்கலான நிறத்தில் model பெயர். web-01 ~/api main Opus என்பதற்கு நெருக்கமான அமைப்பில், இந்த நான்கு பகுதிகளும் வண்ணங்களுடன் இருக்கும்.

ஒரு session தொடங்கும்போதும் (resume உட்பட), புதிய assistant message வரும்போதும், /compact முடிந்த பிறகும், permission mode மாறும்போது, vim mode மாறும்போது, மற்றும் நீங்கள் அமைத்திருந்தால் refreshInterval tick-ன் போதும் இந்த வரி உங்கள் script-ஐ மீண்டும் இயக்கும். மாற்றங்கள் 300 ms கால இடைவெளியில் debounced செய்யப்படுவதால், தொடர்ச்சியான மாற்றங்கள் ஏற்பட்டாலும் script ஒருமுறை மட்டுமே இயங்கும். Autocomplete, help menu மற்றும் permission prompts-ன் போது இந்த bar மறைந்து, மீண்டும் தோன்றும்.

hostname ஏன் முதலில் இருக்க வேண்டும்

ஒன்றுக்கும் மேற்பட்ட server-களில் agents இயங்கும்போது, நீங்கள் எந்த server-ல் இருக்கிறீர்கள் என்பதை terminal மட்டுமே தெரிவிக்கும், ஆனால் terminal-கள் தவறான தகவலைத் தரக்கூடும். ஒரு tmux pane-க்குள் இருந்து இரண்டாவது ssh இணைப்பைத் திறக்கும்போது, window title பெரும்பாலும் பழைய பெயரையே வைத்திருக்கும், ஏனெனில் அந்த title-ஐ அமைத்த shell தான் மாறியிருப்பதை அறியாது. Claude Code-ஐ ஒரு VPS-ல் detached tmux session-ல் இயக்கிவிட்டு ஒரு நாள் கழித்து மீண்டும் இணைந்தால், build server-க்கும் production box-க்கும் இடையே உள்ள வித்தியாசத்தை திரையில் எதனாலும் கண்டறிய முடியாது.

Statusline இதிலிருந்து மாறுபட்டது, ஏனெனில் இது Claude Code-ஆலேயே, ஒவ்வொரு session-க்கும், அந்த session-ல் உள்ள தரவுகளைக் கொண்டு உருவாக்கப்படுகிறது. இது தவறான pane-லிருந்து பெறப்படாது அல்லது refresh ஆகாத shell prompt-ஆல் பழைய தகவலாக மாறாது. அது காட்டும் பெயர், அந்த agent கோப்புகளை எழுதும் server-ஐக் குறிக்கும்.

ஒவ்வொரு server-க்கும் ஒரு தனி நிறத்தைக் கொடுங்கள், அப்போதுதான் நீங்கள் வாசிப்பதற்கு முன்பே அதை அடையாளம் காண முடியும். LINE= assignment-க்கு மேலே இரண்டு வரிகளைச் சேர்க்கவும்:

CODE=$(printf '%s' "$HOST" | cksum | cut -d' ' -f1)
HOST_COLOR=$(printf '\033[%dm' "$((31 + CODE % 6))")

பிறகு ${CYAN}-க்கு பதிலாக ${HOST_COLOR}-ஐப் பயன்படுத்தவும். cksum என்பது hostname-ன் checksum-ஐ அச்சிடும், எனவே ஒரு குறிப்பிட்ட பெயர் எப்போதும் 31 முதல் 36 வரையிலான நிறங்களில் (சிவப்பு முதல் சியான் வரை) ஒரே நிறத்துடன் பொருந்தும். இந்த script-ஐ ஒவ்வொரு server-லும் நகலெடுத்தால், ஒவ்வொன்றும் தன்னைத்தானே அடையாளப்படுத்திக்கொள்ளும்.

அதே காரணத்திற்காக directory-க்கும் இடம் ஒதுக்கப்படுகிறது. ssh கட்டளையில் /srv/api மற்றும் /srv/api-staging ஆகியவற்றைத் தட்டச்சு செய்யும்போது ஒரு விசை மட்டுமே வித்தியாசம், ஆனால் அதன் விளைவு ஒரு பெரிய விபத்தையே ஏற்படுத்தலாம். Model மற்றும் branch ஆகிய இரண்டும் திரையின் அகலத்திற்குத் தகுதியானவை: நீங்கள் எந்த session-ஐத் தொடர்ந்தீர்கள் என்பதை model உணர்த்தும், agent main-ல் commit செய்யப் போகிறதா என்பதை branch உணர்த்தும்.

சிறிய திரை இருக்கும்போது இவை அனைத்தும் இன்னும் தெளிவாகத் தெரியும், ஏனெனில் நம்புவதற்கு window title இருக்காது. உங்கள் அமைப்பு அப்படி இருந்தால், தொலைபேசியிலிருந்து Claude Code-ஐ இயக்குவது என்பதைப் பார்க்கவும்.

ஸ்கிரிப்டை வேகமாக வைத்திருத்தல்

ஒவ்வொரு assistant செய்தியின்போதும் உங்கள் ஸ்கிரிப்ட் இயங்குகிறது, மேலும் புதிய அப்டேட் வரும்போது Claude Code தற்போது இயங்கிக்கொண்டிருக்கும் ஸ்கிரிப்டை ரத்து செய்கிறது. எனவே, ஸ்கிரிப்ட் மெதுவாக இருந்தால், அது பழைய தகவலையோ அல்லது எந்தத் தகவலையோ காட்டாது.

ஒவ்வொரு jq அழைப்பும் சில மில்லி விநாடிகளை எடுத்துக்கொள்ளும். git தான் மெதுவான பகுதி: பெரிய repository-ல் cold cache இருக்கும்போது git status நூற்றுக்கணக்கான மில்லி விநாடிகளை எடுத்துக்கொள்ளும். மேலே உள்ள ஸ்கிரிப்ட் வேண்டுமென்றே git status-ஐத் தவிர்த்துவிட்டு, .git/HEAD-ஐப் படித்து உடனடியாக முடிவைத் தரும் git branch --show-current-ஐ அழைக்கிறது.

நீங்கள் கூடுதல் கனமான எதையாவது சேர்த்தால், அதை ஒரு கோப்பில் cache செய்து, சில விநாடிகளுக்கு ஒருமுறை புதுப்பிக்கவும். session-ஐ அடிப்படையாகக் கொண்டு கோப்பிற்கு key இடவும்:

CACHE="/tmp/statusline-$(field '.session_id')"

$$-க்கு பதிலாக session_id-ஐப் பயன்படுத்தவும். $$ என்பது உங்கள் ஸ்கிரிப்ட்டின் process ID ஆகும், இது ஒவ்வொரு முறை இயங்கும்போதும் மாறுபடும். எனவே, அதை அடிப்படையாகக் கொண்ட cache ஒருபோதும் பயன்படாது, ஒவ்வொரு முறையும் நீங்கள் முழுச் செலவையும் ஏற்க வேண்டியிருக்கும். session_id என்பது முழு session-க்கும் நிலையானது மற்றும் வெவ்வேறு session-களுக்கு இடையில் மாறுபடும். எனவே, இரண்டு வெவ்வேறு repository-களில் உள்ள இரண்டு Claude Code session-கள் ஒன்றின் cache செய்யப்பட்ட branch பெயரை மற்றொன்று படிக்க முடியாது. வடிவமைப்பின்படி session-கள் தனித்தனியாகவே இருக்கும், எனவே ஒரு session-லிருந்து மற்றொன்றுக்கு வேலையை மாற்ற வேண்டுமெனில், ஒரு Claude Code session-லிருந்து மற்றொன்றுக்குச் செய்தி அனுப்புதல் என்ற முறையைப் பயன்படுத்த வேண்டும்.

தெரிந்துகொள்ள வேண்டிய மற்றொரு வரம்பு: statusline ஸ்கிரிப்ட்டிற்குள் tput cols வேலை செய்யாது. உங்கள் ஸ்கிரிப்டை terminal-உடன் இணைப்பதற்குப் பதிலாக, Claude Code அதன் வெளியீட்டைப் பிடித்துக்கொள்கிறது, எனவே அகலத்தைக் கண்டறிய (width detection) அங்கு எதுவும் இருக்காது. v2.1.153 மற்றும் அதற்குப் பிந்தைய பதிப்புகளில், கட்டளையை இயக்குவதற்கு முன்பு Claude Code COLUMNS மற்றும் LINES ஆகிய environment variables-ஐ அமைக்கிறது. எனவே, எவ்வளவு தகவலை அச்சிட வேண்டும் என்பதைத் தீர்மானிக்க வேண்டியிருக்கும் போது $COLUMNS-ஐப் படிக்கவும்.

statusline ஏன் காலியாக உள்ளது

எதுவும் தோன்றவில்லை. ls -l ~/.claude/statusline.sh மூலம் execute bit-ஐச் சரிபார்க்கவும், பிறகு மேலே உள்ள mock input-ஐக் கொண்டு script-ஐ நேரடியாக இயக்கவும். இது shell-ல் ஒரு வரியை அச்சிட்டு, ஆனால் Claude Code-ல் காட்டவில்லை என்றால், claude --debug மூலம் தொடங்கவும்; இது அந்த session-ன் முதல் statusline இயக்கத்தின் exit code மற்றும் stderr-ஐ log செய்யும்.

Debug log Status line command skipped: workspace trust not accepted என்று காட்டுகிறது. Statusline ஒரு shell command-ஐ இயக்குவதால், அது hooks-க்கு உள்ள அதே workspace trust gate-க்கு பின்னால் அமர்கிறது. அந்த directory-க்கான trust dialog-ஐ நீங்கள் ஏற்கும் வரை, command இயங்காது. இது VPS-ல் பொதுவானது, அங்கு ஒவ்வொரு புதிய clone-ம் Claude Code இதுவரை பார்த்திராத ஒரு directory ஆகும். அந்த directory-ல் Claude Code-ஐ restart செய்து, dialog-ஐ ஏற்கவும்.

எல்லாம் காலியாக உள்ளது மற்றும் disableAllHooks set செய்யப்பட்டுள்ளது. settings.json-ல் உள்ள "disableAllHooks": true, statusline-ஐயும் முடக்குகிறது, ஏனெனில் இதுவும் அதே shell-execution gate-ஐப் பயன்படுத்துகிறது. அதை நீக்கவும் அல்லது false என அமைக்கவும்.

வரி null என்று அச்சிடுகிறது. ஒரு jq selector இல்லாத அல்லது null ஆக உள்ள key-ஐ அடைந்துவிட்டது, மேலும் jq -r, null-ஐ null என்ற நான்கு எழுத்துக்களாக அச்சிடுகிறது. உரைக்கு // empty-ஐயும், எண்களுக்கு // 0-ஐயும் சேர்க்கவும்.

script-ஐத் திருத்திய பிறகு வரி காலியாகிறது. non-zero exit code-ஐத் தரும் அல்லது எதையும் அச்சிடாத ஒரு command, அந்த வரியைக் காலி செய்துவிடும். இதற்கு வழக்கமான காரணம் [ -n "$BRANCH" ] && LINE="..." போன்ற இறுதி வரியாகும்; இது branch காலியாக இருக்கும்போது 1 என exit ஆகி, முழு script-ன் exit code-ஐயும் தன்னுடன் எடுத்துச் செல்கிறது. printf-ஐ கடைசியாக வைத்திருக்கவும் அல்லது exit 0-ஐச் சேர்க்கவும்.

Escape codes \e]8;; போன்ற literal text-ஆகத் தெரிகிறது. echo -e-க்கு பதிலாக printf '%b'-ஐப் பயன்படுத்தவும். கிளிக் செய்யக்கூடிய OSC 8 இணைப்புகளுக்கு அவற்றை ஆதரிக்கும் terminal தேவை; tmux அல்லது SSH அந்த sequences-ஐ நீக்கக்கூடும் என்பதால், remote box-ல் plain colour பயன்படுத்துவதே பாதுகாப்பானது.

வரியின் வலது பக்கம் வெட்டப்பட்டுள்ளது. System notifications மற்றும் verbose-mode token counter ஆகியவை அந்த வரியை வலதுபுறத்திலிருந்து பகிர்ந்து கொள்கின்றன, குறுகிய terminal-ல் இந்த overlap இழக்கப்படுகிறது. வெளியீட்டைச் சுருக்கமாக வைத்திருக்கவும். வரியில் உள்ள எண்ணை விட, பயன்பாட்டின் உண்மையான கணக்கீட்டிற்கு, Claude Code எவ்வாறு tokens-ஐக் கணக்கிடுகிறது என்பதைப் பார்க்கவும்.

FAQ

Claude Code statusline அமைப்பு எங்கே சேமிக்கப்படுகிறது?

settings.json-ல், statusLine தொகுதியாக, type என்பது "command" என்றும், command என்பது ஒரு script பாதை அல்லது shell command என்றும் அமைக்கப்பட வேண்டும். பயனர் அமைப்புகள் ~/.claude/settings.json-ல் உள்ளன, இவை அந்த machine-ல் உள்ள அனைத்து project-களுக்கும் பொருந்தும். Project அமைப்புகள் repository-க்குள் .claude/settings.json-ல் உள்ளன, இவை அந்த directory-க்கு முன்னுரிமை பெறும். அமைப்புகள் தானாகவே reload ஆகும், ஆனால் மாற்றம் அடுத்த update trigger-ல் மட்டுமே தெரியும், உதாரணமாக உங்கள் அடுத்த message-ல்.

எனது Claude Code statusline ஏன் காலியாக உள்ளது?

இதற்கு நான்கு காரணங்கள் பெரும்பாலும் காரணமாகின்றன. Script-க்கு execute bit இல்லை, எனவே shell Permission denied-ஐத் தருகிறது, stdout-க்கு எதுவும் வருவதில்லை. Workspace trust dialog ஏற்கப்படவில்லை, மேலும் claude --debug ஆனது Status line command skipped: workspace trust not accepted-ஐ log செய்கிறது. disableAllHooks என்பது true என உள்ளது, இது அதே கட்டுப்பாட்டின் கீழ் statusline-ஐ முடக்குகிறது. அல்லது script பூஜ்ஜியம் அல்லாத (non-zero) exit code-ஐத் தருகிறது, இது வரியைக் காலி செய்கிறது. முதலில் இதை நீங்களே சோதிக்கவும்: echo '{}' | ~/.claude/statusline.sh ஏதேனும் ஒன்றை print செய்ய வேண்டும்.

Statusline JSON-ல் git branch உள்ளதா?

இல்லை. JSON-ல் model, workspace directories, context window எண்கள் மற்றும் செலவு போன்ற session நிலைகள் மட்டுமே இருக்கும். இதில் git பற்றிய தகவல்கள் இல்லை. உங்கள் bar-ல் branch தெரிய வேண்டுமெனில், உங்கள் script மூலம் git branch --show-current-ஐ அழைக்க வேண்டும். JSON-லிருந்து directory-ஐ git -C "$DIR" மூலம் அனுப்பவும், அப்போதுதான் bar காட்டும் directory-க்கு ஏற்ப branch சரியாக அமையும்.

Statusline-க்கு tokens செலவாகுமா அல்லது session வேகம் குறையுமா?

இதற்கு tokens செலவாகாது, ஏனெனில் script உள்ளூர் (locally) கணினியில் இயங்குகிறது மற்றும் அதன் வெளியீடு model-க்கு அனுப்பப்படுவதில்லை. வேகத்தைப் பொறுத்தவரை அது உங்கள் பொறுப்பு. ஒவ்வொரு assistant message-க்கும் இந்த command 300 ms debounce-உடன் இயங்கும். புதிய update வரும்போது, ஏற்கனவே இயங்கிக்கொண்டிருக்கும் Claude Code-ன் run ரத்து செய்யப்படும். எனவே, ஒரு வினாடிக்கு மேல் எடுக்கும் script பழைய தகவலையே காட்டும். பெரிய repository-களில் git status-ஐத் தவிர்க்கவும், மெதுவாக இயங்கும் எதையும் session_id-ஐ அடிப்படையாகக் கொண்ட கோப்பில் cache செய்யவும்.

ஒவ்வொரு server-லும் வெவ்வேறு statusline-ஐ எப்படி காட்டுவது?

ஒரே script-ஐ வைத்துக்கொண்டு, அது machine-ஐ அடையாளம் காணுமாறு செய்யவும். மேலே உள்ள script $HOSTNAME-ஐ print செய்கிறது, hostname -s என்பது fallback-ஆக செயல்படுகிறது. எனவே, ஒவ்வொரு box-க்கும் அதே கோப்பை நகலெடுத்தால், அது ஒவ்வொன்றையும் சரியாக அடையாளம் காட்டும். checksum colour நுட்பத்தைப் பயன்படுத்தி ஒவ்வொரு hostname-க்கும் தனித்தனி நிறத்தை வழங்கலாம். ஒரு server-க்கு மட்டும் வேறு layout தேவைப்பட்டால், அந்த box-ல் உள்ள repository-ன் project அமைப்புகளில் statusLine தொகுதியைச் சேர்க்கவும், ஏனெனில் அந்த directory-க்கு project அமைப்புகள் பயனர் அமைப்புகளை விட முன்னுரிமை பெறும்.