Claude Code statusline அமைப்பது எப்படி?
Claude Code statusline மூலம் VPS-ல் hostname, directory மற்றும் git branch தகவல்களைக் காண்பது எப்படி என்று அறிக. தவறான server-ல் கட்டளைகளை இயக்குவதைத் தவிர்க்க இது உதவும்.
Claude Code statusline எதைக் காட்டுகிறது
Claude Code statusline என்பது நீங்கள் எழுதும் script-ன் வெளியீட்டைத் திரையில் காட்டும் ஒரு வரி ஆகும். நீங்கள் ஒரு statusLine தொகுப்பை 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-ல் தவறான server-ல் migration நடக்கும் அபாயம் உள்ளது. 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 நிலவரப்படி மூன்று விருப்பத்தேர்வு விசைகள் (optional keys) உள்ளன. padding கிடைமட்ட இடைவெளியை எழுத்துக்களில் சேர்க்கிறது, இதன் இயல்புநிலை மதிப்பு 0 ஆகும். refreshInterval சாதாரண தூண்டுதல்களுக்கு (triggers) மேலதிகமாக, ஒவ்வொரு N வினாடிகளுக்கும் கட்டளையை மீண்டும் இயக்குகிறது. இதன் குறைந்தபட்ச மதிப்பு 1 ஆகும்; அமர்வு செயலற்ற நிலையில் இருக்கும்போது கடிகாரம் அல்லது மாறும் தகவல்களைக் காட்ட விரும்பினால் மட்டுமே இதைப் பயன்படுத்தவும். உங்கள் சொந்த script ஏற்கனவே vim mode-ஐக் காட்டும்போது, உள்ளமைக்கப்பட்ட -- INSERT -- உரையை hideVimModeIndicator மறைக்கிறது.
statusline script என்னென்ன தரவுகளைப் பெறுகிறது?
இந்த பக்கம் உட்பட, நீங்கள் எங்கு வாசிக்கும் புலங்களின் (field) பட்டியலையும் அப்படியே நம்ப வேண்டாம். உங்கள் பதிப்பு அனுப்பும் உண்மையான object-ஐ நீங்களே கண்டறியவும். stdin-ஐ ஒரு கோப்பில் சேமிக்கும் ஒரு தற்காலிக script-ஐ உருவாக்கவும்:
cat > ~/.claude/statusline-capture.sh <<'EOF'
#!/bin/bash
cat > /tmp/statusline-input.json
echo "captured"
EOF
chmod +x ~/.claude/statusline-capture.shstatusLine.command-ஐ அந்த கோப்பிற்குச் சுட்டிக்காட்டி, ஒரு session-ஐத் தொடங்கி, ஒரு செய்தியை அனுப்பவும். Bar ஆனது captured-ஐ வாசிக்கும். இப்போது என்ன தரவு வந்துள்ளது என்று பார்க்கவும்:
jq . /tmp/statusline-input.jsonஉங்கள் build-க்கான சரியான வடிவம் உங்களிடம் உள்ளது. ஒரு update எதையாவது மாற்றும் போதெல்லாம் இதை நீங்கள் மீண்டும் செய்து சரிபார்க்கலாம்.
ஆகஸ்ட் 2026-ல் ஆவணப்படுத்தப்பட்டபடி, நிலையான பகுதிகள் தட்டையான 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 மற்றும் கால அளவு (duration) counters-ஐக் கொண்டுள்ளது. session_id என்பது session முழுவதும் நிலையானது மற்றும் ஒவ்வொரு session-க்கும் தனித்துவமானது; இது பிற்காலத்தில் caching செய்ய முக்கியமானது.
schema மாற்றங்களின் போதும் ஒரு script-ஐத் தொடர்ந்து இயங்க வைக்க மூன்று விதிகள் உள்ளன.
சில keys இருக்காது, null-ஆக இருக்காது. vim, agent, pr, worktree மற்றும் effort ஆகியவை அந்தந்த அம்சம் (feature) செயல்பாட்டில் இருக்கும்போது மட்டுமே தோன்றும். vim mode ஆஃப்-ல் இருக்கும்போது 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-ல் இல்லை. எந்தவொரு புலமும் அதைத் தெரிவிக்கவில்லை. உங்கள் 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.shExecute 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 block-ஐப் பயன்படுத்தி, 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 செய்தி வரும்போதும், /compact முடிந்த பிறகும், permission mode மாறும்போது, vim mode மாறும்போது, மற்றும் நீங்கள் அமைத்திருந்தால் refreshInterval tick-ன் போதும் இந்த வரி உங்கள் script-ஐ மீண்டும் இயக்கும். மாற்றங்கள் 300 ms கால இடைவெளியில் debounced செய்யப்படுகின்றன, எனவே தொடர்ச்சியான மாற்றங்கள் ஏற்பட்டாலும் script ஒருமுறை மட்டுமே இயங்கும். Autocomplete, help menu மற்றும் permission prompts-ன் போது இந்த bar மறைந்து, பின்னர் மீண்டும் தோன்றும்.
hostname ஏன் முதலில் இருக்க வேண்டும்
நீங்கள் ஒன்றுக்கும் மேற்பட்ட server-களில் agents-ஐ இயக்கும்போது, நீங்கள் எங்கே இருக்கிறீர்கள் என்பதை 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 எந்த box-ல் கோப்புகளை எழுதுகிறதோ அந்த box-ன் பெயராகும்.
ஒவ்வொரு 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 வரையிலான நிறங்களில் (red முதல் cyan வரை) ஒரே நிறத்தையே குறிக்கும். இந்த script-ஐ ஒவ்வொரு box-லும் நகலெடுத்தால், ஒவ்வொன்றும் தன்னைத்தானே அடையாளப்படுத்திக்கொள்ளும்.
அதே காரணத்திற்காக directory-க்கும் இடம் வழங்கப்படுகிறது. /srv/api மற்றும் /srv/api-staging ஆகியவை ஒரு ssh கட்டளையில் ஒரே ஒரு keystroke வித்தியாசத்தில் இருக்கும், ஆனால் அவற்றின் விளைவு ஒரு பெரிய விபத்தையே ஏற்படுத்தக்கூடும். Model மற்றும் branch ஆகிய இரண்டும் அந்த இடத்திற்குத் தகுதியானவை: நீங்கள் எந்த session-ஐத் தொடர்ந்தீர்கள் என்பதை model உணர்த்தும், agent main-ல் commit செய்யப்போகிறதா என்பதை branch உணர்த்தும்.
சிறிய திரை இருக்கும்போது இவை அனைத்தும் இன்னும் தெளிவாகத் தெரியும், ஏனெனில் அங்கு நம்பியிருக்க window title இருக்காது. அதுதான் உங்கள் setup என்றால், தொலைபேசியிலிருந்து Claude Code-ஐ இயக்குவது என்பதைப் பார்க்கவும்.
ஸ்கிரிப்டை வேகமாக வைத்திருத்தல்
உங்கள் ஸ்கிரிப்ட் ஒவ்வொரு assistant message-க்கும் இயங்குகிறது, மேலும் புதிய update வரும்போது Claude Code தற்போது இயங்கிக்கொண்டிருக்கும் run-ஐ ரத்து செய்கிறது. எனவே, மெதுவான ஸ்கிரிப்ட் பழைய தகவலையோ அல்லது தகவலே இல்லாமலோ காட்டும்.
ஒவ்வொரு 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 ஒருபோதும் hit ஆகாது, ஒவ்வொரு முறையும் நீங்கள் முழுச் செலவையும் ஏற்க வேண்டியிருக்கும். session_id முழு session-க்கும் நிலையானது மற்றும் session-களுக்கு இடையே மாறுபடும், எனவே இரண்டு வெவ்வேறு repository-களில் உள்ள இரண்டு Claude Code session-கள் ஒன்றையொன்று cache செய்த branch name-ஐப் படிக்க முடியாது.
தெரிந்துகொள்ள வேண்டிய மற்றொரு வரம்பு: statusline ஸ்கிரிப்ட்டிற்குள் tput cols வேலை செய்யாது. Claude Code உங்கள் ஸ்கிரிப்ட்டை terminal-உடன் இணைப்பதற்குப் பதிலாக அதன் output-ஐப் பிடிக்கிறது, எனவே 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-ஐ edit செய்த பிறகு வரி காலியாகிறது. பூஜ்ஜியம் அல்லாத (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 links-க்கு அவற்றை ஆதரிக்கும் 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 path அல்லது shell command என்றும் இருக்க வேண்டும். பயனர் அமைப்புகள் ~/.claude/settings.json-ல் உள்ளன; இவை அந்த machine-ல் உள்ள அனைத்து project-களுக்கும் பொருந்தும். Project அமைப்புகள் repository-க்குள் .claude/settings.json-ல் உள்ளன; இவை அந்த directory-க்கு முன்னுரிமை பெறும். அமைப்புகள் தானாகவே reload ஆகும், ஆனால் உங்கள் அடுத்த message போன்ற ஏதேனும் update trigger நிகழ்ந்த பின்னரே மாற்றங்கள் தெரியும்.
எனது Claude Code statusline ஏன் காலியாக உள்ளது?
இதற்கு நான்கு முக்கிய காரணங்கள் உள்ளன. Script-க்கு execute அனுமதி இல்லை என்றால், shell Permission denied-ஐத் தரும், stdout-க்கு எதுவும் வராது. Workspace trust dialog ஏற்கப்படவில்லை என்றால், claude --debug-ல் Status line command skipped: workspace trust not accepted எனப் பதிவாகும். 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 local-ஆகவே இயங்குகிறது மற்றும் அதன் output model-க்கு அனுப்பப்படுவதில்லை. வேகத்தைப் பொறுத்தவரை, அது உங்கள் பொறுப்பு. ஒவ்வொரு assistant message-க்கும் இந்த command 300 ms debounce-உடன் இயங்கும். புதிய update வரும்போது பழைய run-ஐ Claude Code ரத்து செய்துவிடும். எனவே, ஒரு வினாடிக்கு மேல் எடுக்கும் script பழைய தகவலையே காட்டும். பெரிய repository-களில் git status-ஐத் தவிர்க்கவும், மெதுவான எதையும் session_id-ஐ அடிப்படையாகக் கொண்ட file-ல் cache செய்யவும்.
ஒவ்வொரு server-லும் வெவ்வேறு statusline-ஐ எப்படி காட்டுவது?
ஒரே script-ஐ வைத்துக்கொண்டு, அது இயங்கும் machine-ஐ அதுவே கண்டறியுமாறு அமைக்கலாம். மேலே உள்ள script $HOSTNAME-ஐ print செய்யும், hostname -s-ஐ fallback-ஆகப் பயன்படுத்தும். எனவே, ஒரே file-ஐ எல்லா server-களிலும் நகலெடுத்தாலும், ஒவ்வொரு hostname-க்கும் தனித்தனி நிறம் கிடைக்கும். ஒரு server-க்கு மட்டும் தனிப்பட்ட layout தேவைப்பட்டால், அந்த server-ல் உள்ள repository-ன் project அமைப்புகளில் statusLine தொகுதியைச் சேர்க்கவும். ஏனெனில், அந்த directory-க்கு project அமைப்புகளே user அமைப்புகளை விட முன்னுரிமை பெறும்.