VPS پر Claude Code statusline کیسے بنائیں
Claude Code کی statusLine script سے prompt کے نیچے hostname، directory، git branch اور model دکھائیں، تاکہ درست VPS پر کام ہو اور غلط server پر تبدیلی نہ لگے۔
Claude Code statusline کیا دکھاتی ہے
Claude Code statusline ایک ایسی قطار ہے جو prompt کے نیچے دکھائی دیتی ہے اور اس script کا output ظاہر کرتی ہے جو آپ لکھتے ہیں۔ آپ statusLine block کو settings.json میں شامل کرتے ہیں اور اسے ایک command کی طرف متعین کرتے ہیں۔ Claude Code وہ command چلاتا ہے، session state کو JSON کی صورت میں standard input پر بھیجتا ہے، اور command کے standard output پر لکھا ہوا متن دکھاتا ہے۔
یہی مکمل contract ہے۔ آپ کی script standard input سے JSON پڑھتی ہے اور standard output پر متن لکھتی ہے۔ یہ آپ کی machine پر چلتی ہے، اور اس کا کوئی بھی output model کو نہیں بھیجا جاتا، اس لیے اس پر کوئی tokens خرچ نہیں ہوتے۔
ایک project والے laptop پر یہ صرف ظاہری سجاوٹ ہے۔ تین servers پر یہ حفاظتی سہارا ہے۔ ہر terminal میں ہر Claude Code session ایک جیسا دکھائی دیتا ہے، اس لیے بغیر labels کے چار SSH windows ایسی migration کا سبب بن سکتی ہیں جو غلط server پر لاگو ہو جائے۔ hostname سے شروع ہونے والی statusline اس قسم کی غلطی کو روکتی ہے۔
settings.json میں statusLine setting کہاں موجود ہوتی ہے
اسے اپنی user settings میں ~/.claude/settings.json پر شامل کریں۔ یہ اسی machine کے ہر project پر لاگو ہوتی ہے۔ Repository کے اندر موجود project settings، یعنی .claude/settings.json، بھی کام کرتی ہیں اور اس directory کے لیے ترجیح رکھتی ہیں۔
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}type ہمیشہ "command" ہوتی ہے۔ command value ایک shell کے ذریعے چلتی ہے، اس لیے یہ script path یا سادہ command ہو سکتی ہے۔ کوئی script لکھنے سے پہلے wiring کے درست کام کرنے کی تصدیق کریں:
{
"statusLine": {
"type": "command",
"command": "hostname -s"
}
}Claude Code شروع کریں اور ایک message بھیجیں۔ Prompt کے نیچے موجود bar اب server کا مختصر hostname دکھاتی ہے۔ اگر یہ خالی رہے تو مسئلہ setting یا trust dialog میں ہے، آپ کی script میں نہیں۔ نیچے دیا گیا "statusline خالی کیوں رہتی ہے" حصہ پڑھیں۔
August 2026 تک 3 optional keys موجود ہیں۔ padding characters میں horizontal spacing شامل کرتی ہے اور اس کی default value 0 ہے۔ refreshInterval معمول کے triggers کے علاوہ ہر N seconds بعد command دوبارہ چلاتی ہے۔ اس کی کم از کم value 1 ہے۔ اسے صرف اس وقت استعمال کریں جب line پر clock یا session کے idle رہنے کے دوران تبدیل ہونے والی کوئی چیز دکھانی ہو۔ hideVimModeIndicator built-in -- INSERT -- text کو چھپا دیتی ہے، جب آپ کی اپنی script پہلے ہی vim mode render کرتی ہو۔
اسٹیٹس لائن اسکرپٹ کو کون سا ڈیٹا موصول ہوتا ہے؟
کسی بھی جگہ پڑھی ہوئی فیلڈ فہرست پر بھروسا نہ کریں، اس صفحے پر بھی نہیں۔ آپ کا ورژن جو حقیقی آبجیکٹ بھیجتا ہے، اسے capture کریں۔ ایک عارضی اسکرپٹ لکھیں جو stdin کو فائل میں محفوظ کرے:
cat > ~/.claude/statusline-capture.sh <<'EOF'
#!/bin/bash
cat > /tmp/statusline-input.json
echo "captured"
EOF
chmod +x ~/.claude/statusline-capture.shstatusLine.command کو اس فائل کی طرف متوجہ کریں، session شروع کریں، اور ایک پیغام بھیجیں۔ بار 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 وہ جگہ ہے جہاں session شروع کیا گیا تھا، اور working directory session کے دوران بدلنے کے بعد دونوں مختلف ہو جاتے ہیں۔ اعلیٰ سطح کا cwd وہی value رکھتا ہے جو workspace.current_dir میں ہے۔ context_window میں token counts اور پہلے سے calculated used_percentage شامل ہے۔ cost میں total_cost_usd اور duration counters شامل ہیں۔ session_id پورے session کے دوران مستحکم رہتا ہے اور ہر session میں منفرد ہوتا ہے، جو بعد میں caching کے لیے اہم ہے۔
تین قواعد schema میں تبدیلیوں کے باوجود اسکرپٹ کو فعال رکھتے ہیں۔
کچھ keys موجود نہیں ہوتیں، null نہیں ہوتیں۔ vim، agent، pr، worktree اور effort صرف اس وقت ظاہر ہوتی ہیں جب متعلقہ feature فعال ہو۔ vim mode بند ہونے پر jq -r کے ذریعے .vim.mode پڑھنے سے literal string null ظاہر ہوتی ہے، اور bar قاری کو null دکھاتی ہے۔ ہر selector کے آخر میں // empty شامل کریں، تاکہ missing key کی صورت میں کچھ بھی ظاہر نہ ہو۔
کچھ values ابتدا میں null ہوتی ہیں۔ پہلی API response سے پہلے context_window.used_percentage اور context_window.current_usage null ہوتے ہیں، اور /compact کے بعد current_usage دوبارہ null ہو جاتا ہے، یہاں تک کہ اگلی call اسے پھر سے populate کر دے۔ اس لیے bar پر context percentage کے لیے // 0 درکار ہے، ورنہ ہر session کے ابتدائی چند seconds میں null پڑھا جائے گا۔ یہ number bar پر دکھانے سے پہلے یہ جاننا مفید ہے کہ context window حقیقت میں کیسے بھرتی ہے۔
git branch JSON میں شامل نہیں ہوتی۔ کوئی field اسے report نہیں کرتی۔ آپ کی bar پر دکھائی جانے والی branch اسکرپٹ کے خود git چلانے سے حاصل ہوتی ہے۔
ایسی statusline اسکرپٹ جو ناکام ہونے کے بجائے محدود معلومات دکھائے
یہ copy-paste ورژن ہے۔ یہ hostname، working directory، git branch اور model name دکھاتا ہے۔ ہر field کے لیے 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"ہر read، field کے ذریعے ہوتی ہے۔ یہ // empty شامل کرتا ہے، اس لیے renamed یا removed key خالی string پیدا کرتی ہے اور اگلی لائن default فراہم کر دیتی ہے۔ directory کے لیے fallback ترتیب workspace.current_dir، پھر cwd، پھر $PWD ہے۔ branch، سادہ git کے بجائے git -C "$DIR" سے حاصل ہوتی ہے، اس لیے branch ہمیشہ اسی directory سے مطابقت رکھتی ہے جسے bar دکھا رہا ہے۔
اسے محفوظ کریں، پھر executable بنائیں:
chmod +x ~/.claude/statusline.shexecute bit اختیاری نہیں ہے۔ Claude Code command کو shell کے ذریعے چلاتا ہے، اس لیے +x کے بغیر اسکرپٹ Permission denied کے ساتھ ناکام ہو جاتی ہے، کوئی stdout پیدا نہیں کرتی، اور row بغیر کسی واضح error کے خالی رہتی ہے۔
jq command line پر JSON parse کرتا ہے اور fresh Ubuntu server پر پہلے سے installed نہیں ہوتا:
sudo apt update && sudo apt install -y jqپھر setting کو اس اسکرپٹ کی طرف point کریں۔ اس کے لیے اوپر موجود پہلے settings.json block کو استعمال کریں۔
اسکرپٹ پر بھروسا کرنے سے پہلے اس کی جانچ کریں
اسے ہاتھ سے 2 بار چلائیں۔ پہلے ایک معمول کے session object کے ساتھ:
echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/srv/api"},"session_id":"t1"}' | ~/.claude/statusline.shآپ کو hostname، پھر /srv/api، اور پھر Opus ملے گا۔ کوئی branch ظاہر نہیں ہوگی، کیونکہ آپ کی machine پر /srv/api غالباً git repository نہیں ہے۔
دوسری جانچ degradation test ہے، جسے لوگ چھوڑ دیتے ہیں:
echo '{}' | ~/.claude/statusline.shschema change آپ کو جو empty object دے سکتی ہے، یہ اس کی بدترین صورت ہے۔ لائن پھر بھی hostname، $PWD سے موجودہ directory، اور جہاں model name آنا چاہیے وہاں claude کا لفظ print کرتی ہے۔ کچھ crash نہیں ہوتا اور null بھی print نہیں ہوتا۔ جو script یہ test پاس کر لے، وہ کسی field کا نام تبدیل ہونے کے بعد بھی کام کرتی ہے، کیونکہ آپ کی script کے لیے renamed field اور missing field ایک ہی واقعہ ہیں۔
آپ کو کیا نظر آنا چاہیے
statusline built-in footer badges کے اوپر اپنی الگ row میں render ہوتی ہے اور ان کی جگہ نہیں لیتی۔ درست setup میں یہ ایک ہی row ہوتی ہے: cyan رنگ میں short hostname، اس کے بعد working directory، جس میں آپ کی home directory کو ~ تک مختصر دکھایا جاتا ہے؛ پھر directory کے git repository ہونے کی صورت میں yellow رنگ میں branch name؛ اور آخر میں dimmed حالت میں model name۔ مجموعی شکل web-01 ~/api main Opus سے ملتی جلتی ہوتی ہے، اور یہ چاروں حصے رنگین ہوتے ہیں۔
یہ row session شروع ہونے پر، resume سمیت، نیا assistant message آنے پر، /compact کے مکمل ہونے کے بعد، permission mode تبدیل ہونے پر، vim mode toggle ہونے پر، اور اگر آپ نے interval مقرر کیا ہو تو ہر refreshInterval tick پر آپ کی script دوبارہ چلاتی ہے۔ Updates کو 300 ms تک debounce کیا جاتا ہے، اس لیے تبدیلیوں کا ایک مختصر سلسلہ script کو صرف ایک بار چلاتا ہے۔ autocomplete، help menu اور permission prompts کے دوران bar چھپ جاتی ہے، پھر دوبارہ ظاہر ہو جاتی ہے۔
hostname پہلے کیوں دکھانا ضروری ہے
جب آپ ایک سے زیادہ سرورز پر agents چلا رہے ہوں تو terminal ہی واحد چیز ہوتی ہے جو بتاتی ہے کہ آپ کہاں موجود ہیں، اور terminals قابلِ اعتماد نہیں ہوتے۔ tmux pane کے اندر سے دوسری ssh connection کھولیں تو window title اکثر پرانا نام دکھاتا رہتا ہے، کیونکہ title ایسی shell نے set کیا ہوتا ہے جسے یہ معلوم ہی نہیں ہوتا کہ وہ منتقل ہو چکی ہے۔ VPS پر الگ کیے گئے tmux session میں Claude Code چلاتے رہیں اور ایک دن بعد دوبارہ attach کریں تو screen پر build server اور production box میں فرق کرنے والی کوئی چیز نہیں ہوتی۔
statusline مختلف ہے، کیونکہ اسے Claude Code خود ہر session کے لیے اس session میں موجود data سے render کرتا ہے۔ یہ غلط pane سے inherit نہیں ہو سکتی اور نہ ہی ایسی shell prompt کی وجہ سے پرانی رہتی ہے جو refresh نہ ہوئی ہو۔ statusline میں دکھائی دینے والا نام اسی box کا ہوتا ہے جہاں agent files لکھ رہا ہے۔
ہر server کے لیے الگ colour مقرر کریں، تاکہ پڑھنے سے پہلے ہی آپ اسے پہچان سکیں۔ LINE= assignment سے پہلے یہ دو lines شامل کریں:
CODE=$(printf '%s' "$HOST" | cksum | cut -d' ' -f1)
HOST_COLOR=$(printf '\033[%dm' "$((31 + CODE % 6))")اس کے بعد ${CYAN} کی جگہ ${HOST_COLOR} استعمال کریں۔ cksum hostname کا checksum دکھاتا ہے، اس لیے ہر نام ہمیشہ 31 سے 36 کے range میں ایک ہی colour سے map ہوتا ہے؛ یہ colours red سے cyan تک ہوتے ہیں۔ یہی script ہر box پر copy کریں، اور ہر box خود اپنا label دکھائے گا۔
directory بھی اسی وجہ سے اہم ہے۔ /srv/api اور /srv/api-staging ایک ssh command میں صرف ایک keystroke کے فاصلے پر ہیں، لیکن ان کے اثرات میں پورا incident کا فرق ہو سکتا ہے۔ model اور branch وہ دوسرے دو fields ہیں جن کے لیے statusline میں جگہ رکھنا مفید ہے: model بتاتا ہے کہ آپ نے کون سا session resume کیا ہے، اور branch بتاتی ہے کہ agent کہیں main پر commit کرنے والا تو نہیں۔
چھوٹی screen پر یہ معلومات اور بھی اہم ہو جاتی ہیں، کیونکہ وہاں window title کا متبادل موجود نہیں ہوتا۔ اگر آپ کا setup ایسا ہے تو فون سے Claude Code چلانے کا طریقہ دیکھیں۔
اسکرپٹ کو تیز رکھیں
آپ کا اسکرپٹ ہر assistant پیغام پر چلتا ہے، اور نئی update آنے پر Claude Code جاری run کو منسوخ کر دیتا ہے۔ اس لیے سست اسکرپٹ پرانا متن دکھا سکتا ہے یا کچھ بھی نہیں دکھاتا۔
ہر jq call پر چند milliseconds صرف ہوتے ہیں۔ git وہ حصہ ہے جو سست ہو جاتا ہے: cold cache کے ساتھ بڑی repository میں git status کو مکمل ہونے میں سیکڑوں milliseconds لگ سکتے ہیں۔ اوپر دیا گیا اسکرپٹ دانستہ طور پر git status سے گریز کرتا ہے اور git branch --show-current کو call کرتا ہے، جو .git/HEAD پڑھ کر فوراً واپس آ جاتا ہے۔
اگر آپ کوئی زیادہ بھاری کام شامل کریں تو اسے file میں cache کریں اور ہر چند seconds بعد refresh کریں۔ file کی key session کے نام پر رکھیں:
CACHE="/tmp/statusline-$(field '.session_id')"session_id استعمال کریں، $$ نہیں۔ $$ آپ کے اسکرپٹ کا process ID ہے، جو ہر invocation میں بدل جاتا ہے۔ اس لیے اس پر مبنی cache کبھی hit نہیں ہوتا اور ہر بار مکمل لاگت ادا کرنا پڑتی ہے۔ session_id پورے session میں مستقل رہتا ہے اور مختلف sessions کے درمیان مختلف ہوتا ہے۔ اس طرح دو repositories میں چلنے والے دو Claude Code sessions ایک دوسرے کا cached branch name نہیں پڑھ سکتے۔ Sessions کو اسی طرح الگ رکھا جاتا ہے۔ اس لیے ایک session سے دوسرے session کو کام سونپنے کے لیے دانستہ قدم درکار ہوتا ہے۔ ایک Claude Code session سے دوسرے کو پیغام بھیجنا اسی مقصد کے لیے ہے۔
ایک اور حد بھی جاننا مفید ہے: tput cols statusline script کے اندر کام نہیں کرتا۔ Claude Code output capture کرتا ہے، اس لیے آپ کے اسکرپٹ کو terminal کے ساتھ attach نہیں کرتا۔ چنانچہ width detection کے لیے پیمائش کرنے کو کچھ نہیں ہوتا۔ v2.1.153 اور بعد کے versions میں Claude Code command چلانے سے پہلے COLUMNS اور LINES environment variables set کرتا ہے۔ اس لیے جب یہ فیصلہ کرنا ہو کہ کتنا output دکھانا ہے تو $COLUMNS پڑھیں۔
اسٹیٹس لائن خالی کیوں رہتی ہے
بالکل کچھ بھی ظاہر نہیں ہوتا۔ ls -l ~/.claude/statusline.sh کے ذریعے execute bit چیک کریں، پھر اوپر دیے گئے mock input کے ساتھ script کو دستی طور پر چلائیں۔ اگر shell میں ایک لائن ظاہر ہوتی ہے لیکن Claude Code میں نہیں، تو claude --debug سے شروع کریں۔ یہ session میں statusline کے پہلے run کا 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 ایسی directory ہوتا ہے جسے Claude Code نے پہلے نہیں دیکھا۔ Claude Code کو اسی directory میں restart کریں اور dialog قبول کریں۔
سب کچھ خالی ہے اور disableAllHooks set ہے۔ settings.json میں "disableAllHooks": true statusline کو بھی غیر فعال کرتا ہے، کیونکہ یہ بھی وہی shell-execution gate استعمال کرتا ہے۔ اسے ہٹا دیں یا false پر set کریں۔
Row میں null ظاہر ہوتا ہے۔ jq selector ایسے key تک پہنچا جس کا وجود نہیں ہے یا جس کی قدر null ہے، اور jq -r null کو چار حروف null کی صورت میں print کرتا ہے۔ متن کے لیے // empty اور نمبروں کے لیے // 0 شامل کریں۔
Script میں ترمیم کے فوراً بعد row خالی ہو جاتی ہے۔ جو command non-zero پر exit ہو یا کچھ print نہ کرے، وہ row کو خالی کر دیتی ہے۔ عام وجہ آخری لائن جیسی [ -n "$BRANCH" ] && LINE="..." ہوتی ہے، جو branch خالی ہونے پر 1 پر exit کرتی ہے اور پورے script کا exit code بھی یہی بن جاتا ہے۔ printf کو آخری رکھیں یا exit 0 شامل کریں۔
Escape codes bar پر literal text کی صورت میں دکھائی دیتے ہیں، مثلاً \e]8;;۔ echo -e کے بجائے printf '%b' استعمال کریں۔ Clickable OSC 8 links کے لیے بھی ایسا terminal درکار ہے جو انہیں support کرتا ہو۔ tmux یا SSH یہ sequences ہٹا سکتے ہیں، اس لیے remote box پر plain colour زیادہ محفوظ انتخاب ہے۔
Row کا دایاں حصہ کٹ جاتا ہے۔ System notifications اور verbose-mode token counter اسی row میں دائیں جانب سے جگہ استعمال کرتے ہیں، اور narrow terminal میں یہ ایک دوسرے پر آ جاتے ہیں۔ Output مختصر رکھیں۔ Usage کی حقیقی accounting کے لیے، نہ کہ bar پر دکھنے والی کسی تعداد کے لیے، Claude Code tokens کیسے شمار کرتا ہے دیکھیں۔
FAQ
Claude Code کی statusline setting کہاں موجود ہوتی ہے؟
یہ settings.json میں statusLine block کے طور پر موجود ہوتی ہے، جس میں type کو "command" اور command کو script path یا shell command پر set کیا جاتا ہے۔ User settings ~/.claude/settings.json میں ہوتی ہیں اور اس machine کے ہر project پر لاگو ہوتی ہیں۔ Project settings repository کے اندر .claude/settings.json میں ہوتی ہیں اور اس directory کے لیے ترجیح رکھتی ہیں۔ Settings خود reload ہو جاتی ہیں، لیکن تبدیلی اگلے update trigger تک نظر نہیں آتی، مثلاً آپ کے اگلے message تک۔
میری Claude Code statusline خالی کیوں ہے؟
تقریباً تمام صورتوں کی وضاحت 4 وجوہات سے ہو جاتی ہے۔ Script پر execute bit موجود نہیں، اس لیے shell Permission denied واپس کرتا ہے اور stdout تک کچھ نہیں پہنچتا۔ Workspace trust dialog قبول نہیں کیا گیا، اور claude --debug میں Status line command skipped: workspace trust not accepted log ہوتا ہے۔ disableAllHooks، true ہے، جس سے اسی gate کے تحت statusline غیر فعال ہو جاتی ہے۔ یا script non-zero کے ساتھ exit کرتی ہے، جس سے row خالی ہو جاتی ہے۔ پہلے اسے دستی طور پر test کریں: echo '{}' | ~/.claude/statusline.sh کو کچھ output دینا ضروری ہے۔
کیا statusline JSON میں git branch شامل ہوتی ہے؟
نہیں۔ JSON میں session state شامل ہوتی ہے، مثلاً model، workspace directories، context window numbers اور cost۔ اس میں git کے بارے میں کوئی معلومات نہیں ہوتی۔ آپ کی bar میں branch آپ کی اپنی script کے git branch --show-current چلانے سے آتی ہے۔ JSON سے directory git -C "$DIR" کے ذریعے دیں، تاکہ branch ہمیشہ اسی directory سے مطابقت رکھے جسے bar دکھا رہی ہے۔
کیا statusline tokens استعمال کرتی ہے یا session کو سست کرتی ہے؟
یہ کوئی tokens استعمال نہیں کرتی، کیونکہ script مقامی طور پر چلتی ہے اور اس کا output model کو نہیں بھیجا جاتا۔ رفتار کی ذمہ داری آپ کی ہے۔ یہ command ہر assistant message پر 300 ms debounce کے ساتھ چلتی ہے، اور نیا update آنے پر Claude Code جاری run منسوخ کر دیتا ہے؛ اس لیے اگر script کو پورا 1 second لگے تو پرانا text دکھائی دے گا۔ بڑی repositories میں git status سے گریز کریں، اور جو چیز سست ہو اسے session_id کی بنیاد پر file میں cache کریں۔
ہر server پر مختلف statusline کیسے دکھاؤں؟
ایک ہی script رکھیں اور اسے machine کی معلومات پڑھنے دیں۔ اوپر والی script $HOSTNAME کو hostname -s کے fallback کے ساتھ print کرتی ہے، اس لیے ہر box پر copy کی گئی وہی file ہر machine کو درست label کرتی ہے، اور checksum colour trick ہر hostname کے لیے الگ colour فراہم کرتی ہے۔ اگر کسی server کو مختلف layout درکار ہو تو اس server پر موجود repository کی project settings میں statusLine block رکھیں، کیونکہ اس directory کے لیے project settings کو user settings پر ترجیح حاصل ہوتی ہے۔