{"slug": "claude-code-status-line-complete-guide-all-fields-config-ready-to-use-scripts", "title": "Claude Code Status Line - Complete Guide: all fields, config, ready-to-use scripts", "summary": "A developer published a guide to Claude Code's status line feature, a customizable bar at the bottom of the terminal that displays real-time session data such as model name, context usage, cost, and code velocity. The guide includes ready-to-use scripts and configuration examples, emphasizing that the feature runs entirely locally with no API usage.", "body_md": "Claude Code Status Line - Complete Guide: all fields, config, ready-to-use scripts\n\nA persistent, customizable bar at the bottom of Claude Code that shows real-time session data.\n\n[What Is It?](https://gist.github.com/starred.atom#what-is-it)[Quick Start](https://gist.github.com/starred.atom#quick-start)[Want Mine?](https://gist.github.com/starred.atom#want-mine)[Available Data Fields](https://gist.github.com/starred.atom#available-data-fields)[Your Script Superpowers](https://gist.github.com/starred.atom#your-script-superpowers)[Ready-to-Use Scripts](https://gist.github.com/starred.atom#ready-to-use-scripts)[Full JSON Schema](https://gist.github.com/starred.atom#full-json-schema)[Tips and Tricks](https://gist.github.com/starred.atom#tips-and-tricks)[All Claude Code Settings](https://gist.github.com/starred.atom#all-claude-code-settings)\n\nThe status line is an **info bar pinned to the bottom of your Claude Code window**. Think of it like the status bar in VS Code or the bottom of a Google Doc — it just sits there showing you useful stuff while you work.\n\n**What can it show?**\n\n- Which AI model you're using\n- Your project name and git branch\n- How much of your conversation memory is used up (context %)\n- How much the session has cost so far\n- How long you've been working\n- Lines of code added / removed\n- …and more\n\n**How does it work?**\nYou tell Claude what you want to see, and it builds the status bar for you. No coding required on your part — just describe it in plain English.\n\n**Does it cost anything?**\nNope. It runs entirely on your machine. Zero API usage.\n\nJust type a `/statusline`\n\ncommand describing what you want:\n\n```\n/statusline show model name and context percentage with a progress bar\n```\n\nClaude generates the script, saves it, and wires up settings for you. Done.\n\n**More examples:**\n\n```\n/statusline show repo name, git branch, context bar, and model\n/statusline show cost and session duration with model name\n/statusline show git branch with colored staged/modified file counts\n/statusline two lines: model and branch on top, color-coded context bar with cost on bottom\n```\n\n**To remove it:**\n\n```\n/statusline clear\n```\n\nHere's the exact status line I use daily. Fully color-coded with icons and a gradient context bar.\n\n**What it looks like:**\n\n| Element | Example | Color |\n|---|---|---|\n| Repo name | `EasyClaw` |\nBold yellow |\n| Branch | `🌿 (main)` |\nBold cyan |\n| Context bar | `⚡ █████████░░░░░░░░░░░ 47%` |\nTrue RGB gradient (green → yellow → red) + dynamic emoji |\n| Context emoji | 🟢 → ⚡ → 🔥 → 🚨 | Changes at 20% / 70% / 90% |\n| Cost | `$0.47` |\nYellow |\n| Code velocity | `+156 -23` |\nGreen adds, red deletes |\n| Model | `🤖 Opus 4.6` |\nMagenta |\n| Separators | `|` |\nDim gray |\n\n**One command to get it:**\n\n```\n/statusline single line, fully color-coded with truecolor RGB gradient: repo name bold yellow, 🌿 leaf icon + git branch in bold cyan with parentheses, 20-block context bar using 24-bit RGB gradient from green(0,200,80) through yellow(220,200,0) to red(220,40,20) with dark gray(60,60,60) empty blocks, dynamic emoji that changes with usage (🟢 under 20%, ⚡ 20-69%, 🔥 70-89%, 🚨 90%+), percentage colored by usage level, session cost in yellow, code velocity showing +lines in green and -lines in red, 🤖 robot icon + model name in magenta, dim gray pipe separators between all elements\n```\n\n**Or copy the script directly:**\n\n``` bash\n#!/usr/bin/env bash\n# Claude Code status line: RGB gradient, dynamic emoji, cost, code velocity\n\ninput=$(cat)\n\n# ── Colors ──\nCYAN='\\033[36m'\nGREEN='\\033[32m'\nYELLOW='\\033[33m'\nRED='\\033[31m'\nMAGENTA='\\033[35m'\nDIM='\\033[2m'\nBOLD='\\033[1m'\nRESET='\\033[0m'\n\n# ── Truecolor helper ──\nrgb() { printf '\\033[38;2;%d;%d;%dm' \"$1\" \"$2\" \"$3\"; }\n\n# ── Parse JSON fields ──\nmodel=$(echo \"$input\" | jq -r '.model.display_name // \"Unknown\"')\nused=$(echo \"$input\" | jq -r '.context_window.used_percentage // empty')\ncost=$(echo \"$input\" | jq -r '.cost.total_cost_usd // 0')\nlines_add=$(echo \"$input\" | jq -r '.cost.total_lines_added // 0')\nlines_del=$(echo \"$input\" | jq -r '.cost.total_lines_removed // 0')\ncwd=$(echo \"$input\" | jq -r '.workspace.current_dir // .cwd // \"\"')\n\n# ── Git info ──\nbranch=\"\"\nrepo=\"\"\nif [ -n \"$cwd\" ]; then\n  branch=$(git -C \"$cwd\" --no-optional-locks symbolic-ref --short HEAD 2>/dev/null)\n  repo=$(basename \"$(git -C \"$cwd\" --no-optional-locks rev-parse --show-toplevel 2>/dev/null)\" 2>/dev/null)\nfi\n\n# ── Context bar: RGB gradient, full blocks only ──\nBAR_WIDTH=20\n\nif [ -n \"$used\" ]; then\n  used_int=$(printf '%.0f' \"$used\")\n\n  # Round to nearest block\n  filled=$(( (used_int * BAR_WIDTH + 50) / 100 ))\n\n  bar=\"\"\n  for (( i=0; i<BAR_WIDTH; i++ )); do\n    pos=$(( i * 100 / (BAR_WIDTH - 1) ))\n\n    if [ \"$pos\" -le 50 ]; then\n      r=$(( 0 + 220 * pos / 50 ))\n      g=200\n      b=$(( 80 - 80 * pos / 50 ))\n    else\n      adj=$(( pos - 50 ))\n      r=220\n      g=$(( 200 - 160 * adj / 50 ))\n      b=$(( 0 + 20 * adj / 50 ))\n    fi\n\n    if [ \"$i\" -lt \"$filled\" ]; then\n      bar=\"${bar}$(rgb $r $g $b)█\"\n    else\n      bar=\"${bar}\\033[38;2;60;60;60m░\"\n    fi\n  done\n  bar=\"${bar}${RESET}\"\n\n  if [ \"$used_int\" -ge 90 ]; then status_emoji=\"🚨\"\n  elif [ \"$used_int\" -ge 70 ]; then status_emoji=\"🔥\"\n  elif [ \"$used_int\" -ge 20 ]; then status_emoji=\"⚡\"\n  else status_emoji=\"🟢\"; fi\n\n  if [ \"$used_int\" -ge 90 ]; then pct_color=\"$RED\"\n  elif [ \"$used_int\" -ge 70 ]; then pct_color=\"$YELLOW\"\n  else pct_color=\"$GREEN\"; fi\n\n  ctx_part=\"${status_emoji} ${bar} ${pct_color}${used_int}%${RESET}\"\nelse\n  ctx_part=\"🟢 \\033[38;2;60;60;60m░░░░░░░░░░░░░░░░░░░░${RESET} --%\"\nfi\n\n# ── Cost ──\ncost_part=\"${YELLOW}$(printf '$%.2f' \"$cost\")${RESET}\"\n\n# ── Code velocity ──\nvelocity=\"${GREEN}+${lines_add}${RESET} ${RED}-${lines_del}${RESET}\"\n\n# ── Single line ──\nout=\"\"\n[ -n \"$repo\" ] && out=\"${BOLD}${YELLOW}${repo}${RESET}\"\n[ -n \"$branch\" ] && out=\"${out:+$out }${BOLD}${CYAN}🌿 (${branch})${RESET}\"\nout=\"${out:+$out ${DIM}|${RESET} }${ctx_part}\"\nout=\"${out} ${DIM}|${RESET} ${cost_part}\"\nout=\"${out} ${DIM}|${RESET} ${velocity}\"\nout=\"${out} ${DIM}|${RESET} ${MAGENTA}🤖 ${model}${RESET}\"\n\nprintf '%b' \"$out\"\n```\n\nEvery time your script runs, it receives JSON via `stdin`\n\n. Here is everything you can display.\n\n| Field | What It Shows | Example Value |\n|---|---|---|\n`model.id` |\nModel identifier | `\"claude-opus-4-6\"` |\n`model.display_name` |\nFriendly model name | `\"Opus\"` |\n`session_id` |\nUnique session ID | `\"abc123...\"` |\n`session_name` |\nCustom name (via `/rename` ) |\n`\"my-feature-work\"` |\n`version` |\nClaude Code version | `\"2.1.90\"` |\n\n| Field | What It Shows | Example Value |\n|---|---|---|\n`cwd` |\nCurrent working directory | `\"/Users/me/project\"` |\n`workspace.current_dir` |\nSame as `cwd` (preferred) |\n`\"/Users/me/project\"` |\n`workspace.project_dir` |\nWhere Claude Code was launched | `\"/Users/me/project\"` |\n`workspace.added_dirs` |\nExtra dirs added via `/add-dir` |\n`[]` |\n`workspace.git_worktree` |\nGit worktree name (if in one) | `\"feature-xyz\"` |\n\n| Field | What It Shows | Example |\n|---|---|---|\n`context_window.used_percentage` |\n% of context used | `30` |\n`context_window.remaining_percentage` |\n% of context remaining | `70` |\n`context_window.context_window_size` |\nMax tokens (200K or 1M) | `200000` |\n`context_window.total_input_tokens` |\nCumulative input tokens | `15234` |\n`context_window.total_output_tokens` |\nCumulative output tokens | `4521` |\n`context_window.current_usage.input_tokens` |\nInput tokens in last API call | `8500` |\n`context_window.current_usage.output_tokens` |\nOutput tokens from last call | `1200` |\n`context_window.current_usage.cache_creation_input_tokens` |\nTokens written to cache | `5000` |\n`context_window.current_usage.cache_read_input_tokens` |\nTokens read from cache | `2000` |\n`exceeds_200k_tokens` |\nLast response exceeded 200K | `false` |\n\n| Field | What It Shows | Example Value |\n|---|---|---|\n`cost.total_cost_usd` |\nTotal session cost (USD) | `0.01234` |\n`cost.total_duration_ms` |\nWall-clock time since start | `45000` |\n`cost.total_api_duration_ms` |\nTime waiting for API responses | `2300` |\n`cost.total_lines_added` |\nLines of code added | `156` |\n`cost.total_lines_removed` |\nLines of code removed | `23` |\n\n| Field | What It Shows | Example Value |\n|---|---|---|\n`rate_limits.five_hour.used_percentage` |\n5-hour usage % | `23.5` |\n`rate_limits.five_hour.resets_at` |\nReset time (Unix epoch) | `1738425600` |\n`rate_limits.seven_day.used_percentage` |\n7-day usage % | `41.2` |\n`rate_limits.seven_day.resets_at` |\nReset time (Unix epoch) | `1738857600` |\n\n| Field | When It Appears | Example Value |\n|---|---|---|\n`vim.mode` |\nWhen vim mode is enabled | `\"NORMAL\"` or `\"INSERT\"` |\n`output_style.name` |\nCurrent output style | `\"default\"` |\n`agent.name` |\nWhen using `--agent` flag |\n`\"security-reviewer\"` |\n`worktree.name` |\nDuring `--worktree` sessions |\n`\"my-feature\"` |\n`worktree.path` |\nWorktree directory path | `\"/path/to/worktree\"` |\n`worktree.branch` |\nWorktree git branch | `\"worktree-my-feature\"` |\n`worktree.original_cwd` |\nDir before entering worktree | `\"/path/to/project\"` |\n`worktree.original_branch` |\nBranch before entering worktree | `\"main\"` |\n`transcript_path` |\nPath to conversation transcript | `\"/path/to/transcript\"` |\n\nEach `echo`\n\n/ `print`\n\ncreates a separate row:\n\n```\necho \"Line 1: Model and branch info\"\necho \"Line 2: Context bar and cost\"\n+-----------------------------------------------------------------+\n|  [Opus] EasyClaw | main                                          |\n|  [####......] 40% | $0.23 | 12m 5s                               |\n+-----------------------------------------------------------------+\n```\n\nUse escape codes for colored output:\n\n```\nGREEN='\\033[32m'\nYELLOW='\\033[33m'\nRED='\\033[31m'\nCYAN='\\033[36m'\nRESET='\\033[0m'\n\necho -e \"${GREEN}All good${RESET} | ${RED}Warning${RESET}\"\n```\n\nUse OSC 8 escape sequences (requires iTerm2, Kitty, or WezTerm):\n\n```\nprintf '%b' \"\\e]8;;https://github.com/user/repo\\aRepo Name\\e]8;;\\a\"\n```\n\nHold `Cmd`\n\n(macOS) or `Ctrl`\n\n(Windows/Linux) and click to open.\n\nCopy any of these and pass them to `/statusline`\n\n, or just describe what you want in plain English.\n\n```\n[Opus] [###.......] 30%\nbash\n#!/bin/bash\ninput=$(cat)\n\nMODEL=$(echo \"$input\" | jq -r '.model.display_name')\nPCT=$(echo \"$input\" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)\n\nBAR_WIDTH=10\nFILLED=$((PCT * BAR_WIDTH / 100))\nEMPTY=$((BAR_WIDTH - FILLED))\nBAR=\"\"\n[ \"$FILLED\" -gt 0 ] && printf -v FILL \"%${FILLED}s\" && BAR=\"${FILL// /▓}\"\n[ \"$EMPTY\" -gt 0 ] && printf -v PAD \"%${EMPTY}s\" && BAR=\"${BAR}${PAD// /░}\"\n\necho \"[$MODEL] $BAR $PCT%\"\nEasyClaw (main)  [███░░░░░░░] 30%  Claude Opus 4\nbash\n#!/bin/bash\ninput=$(cat)\n\nmodel=$(echo \"$input\" | jq -r '.model.display_name // \"Unknown Model\"')\n\nused=$(echo \"$input\" | jq -r '.context_window.used_percentage // empty')\nif [ -n \"$used\" ]; then\n  used_int=$(printf '%.0f' \"$used\")\n  filled=$(( used_int / 10 ))\n  empty=$(( 10 - filled ))\n  bar=\"\"\n  for i in $(seq 1 $filled); do bar=\"${bar}█\"; done\n  for i in $(seq 1 $empty);  do bar=\"${bar}░\"; done\n  ctx_part=\"[${bar}] ${used_int}%\"\nelse\n  ctx_part=\"[░░░░░░░░░░] --%\"\nfi\n\ncwd=$(echo \"$input\" | jq -r '.workspace.current_dir // .cwd // \"\"')\nbranch=\"\"\nrepo=\"\"\nif [ -n \"$cwd\" ]; then\n  branch=$(git -C \"$cwd\" --no-optional-locks symbolic-ref --short HEAD 2>/dev/null)\n  repo=$(basename \"$(git -C \"$cwd\" --no-optional-locks rev-parse --show-toplevel 2>/dev/null)\" 2>/dev/null)\nfi\n\nout=\"\"\n[ -n \"$repo\" ] && out=\"$repo\"\n[ -n \"$branch\" ] && out=\"${out:+$out }(${branch})\"\nout=\"${out:+$out  }${ctx_part}  ${model}\"\n\nprintf '%s' \"$out\"\n[Opus] EasyClaw | main +2 ~5\nbash\n#!/bin/bash\ninput=$(cat)\n\nMODEL=$(echo \"$input\" | jq -r '.model.display_name')\nDIR=$(echo \"$input\" | jq -r '.workspace.current_dir')\n\nGREEN='\\033[32m'; YELLOW='\\033[33m'; RESET='\\033[0m'\n\nif git rev-parse --git-dir > /dev/null 2>&1; then\n    BRANCH=$(git branch --show-current 2>/dev/null)\n    STAGED=$(git diff --cached --numstat 2>/dev/null | wc -l | tr -d ' ')\n    MODIFIED=$(git diff --numstat 2>/dev/null | wc -l | tr -d ' ')\n\n    GIT_STATUS=\"\"\n    [ \"$STAGED\" -gt 0 ] && GIT_STATUS=\"${GREEN}+${STAGED}${RESET}\"\n    [ \"$MODIFIED\" -gt 0 ] && GIT_STATUS=\"${GIT_STATUS}${YELLOW}~${MODIFIED}${RESET}\"\n\n    echo -e \"[$MODEL] ${DIR##*/} | $BRANCH $GIT_STATUS\"\nelse\n    echo \"[$MODEL] ${DIR##*/}\"\nfi\n[Opus] $0.23 | 12m 5s\nbash\n#!/bin/bash\ninput=$(cat)\n\nMODEL=$(echo \"$input\" | jq -r '.model.display_name')\nCOST=$(echo \"$input\" | jq -r '.cost.total_cost_usd // 0')\nDURATION_MS=$(echo \"$input\" | jq -r '.cost.total_duration_ms // 0')\n\nCOST_FMT=$(printf '$%.2f' \"$COST\")\nDURATION_SEC=$((DURATION_MS / 1000))\nMINS=$((DURATION_SEC / 60))\nSECS=$((DURATION_SEC % 60))\n\necho \"[$MODEL] $COST_FMT | ${MINS}m ${SECS}s\"\n[Opus] EasyClaw | main\n[####......] 40% | $0.23 | 12m 5s\n```\n\nContext bar changes color: green < 70% | yellow 70-89% | red 90%+\n\n``` bash\n#!/bin/bash\ninput=$(cat)\n\nMODEL=$(echo \"$input\" | jq -r '.model.display_name')\nDIR=$(echo \"$input\" | jq -r '.workspace.current_dir')\nCOST=$(echo \"$input\" | jq -r '.cost.total_cost_usd // 0')\nPCT=$(echo \"$input\" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)\nDURATION_MS=$(echo \"$input\" | jq -r '.cost.total_duration_ms // 0')\n\nCYAN='\\033[36m'; GREEN='\\033[32m'; YELLOW='\\033[33m'; RED='\\033[31m'; RESET='\\033[0m'\n\nif [ \"$PCT\" -ge 90 ]; then BAR_COLOR=\"$RED\"\nelif [ \"$PCT\" -ge 70 ]; then BAR_COLOR=\"$YELLOW\"\nelse BAR_COLOR=\"$GREEN\"; fi\n\nFILLED=$((PCT / 10)); EMPTY=$((10 - FILLED))\nprintf -v FILL \"%${FILLED}s\"; printf -v PAD \"%${EMPTY}s\"\nBAR=\"${FILL// /█}${PAD// /░}\"\n\nMINS=$((DURATION_MS / 60000)); SECS=$(((DURATION_MS % 60000) / 1000))\n\nBRANCH=\"\"\ngit rev-parse --git-dir > /dev/null 2>&1 && BRANCH=\" | $(git branch --show-current 2>/dev/null)\"\n\necho -e \"${CYAN}[$MODEL]${RESET} ${DIR##*/}$BRANCH\"\nCOST_FMT=$(printf '$%.2f' \"$COST\")\necho -e \"${BAR_COLOR}${BAR}${RESET} ${PCT}% | ${YELLOW}${COST_FMT}${RESET} | ${MINS}m ${SECS}s\"\n[Opus] 5h: 23% | 7d: 41%\nbash\n#!/bin/bash\ninput=$(cat)\n\nMODEL=$(echo \"$input\" | jq -r '.model.display_name')\nFIVE_HR=$(echo \"$input\" | jq -r '.rate_limits.five_hour.used_percentage // empty')\nSEVEN_DAY=$(echo \"$input\" | jq -r '.rate_limits.seven_day.used_percentage // empty')\n\nout=\"[$MODEL]\"\n[ -n \"$FIVE_HR\" ] && out=\"$out 5h: $(printf '%.0f' \"$FIVE_HR\")%\"\n[ -n \"$SEVEN_DAY\" ] && out=\"$out | 7d: $(printf '%.0f' \"$SEVEN_DAY\")%\"\n\necho \"$out\"\n```\n\nThis is the complete JSON your script receives on `stdin`\n\n:\n\n```\n{\n  \"cwd\": \"/current/working/directory\",\n  \"session_id\": \"abc123...\",\n  \"session_name\": \"my-session\",\n  \"transcript_path\": \"/path/to/transcript.jsonl\",\n  \"model\": {\n    \"id\": \"claude-opus-4-6\",\n    \"display_name\": \"Opus\"\n  },\n  \"workspace\": {\n    \"current_dir\": \"/current/working/directory\",\n    \"project_dir\": \"/original/project/directory\",\n    \"added_dirs\": [],\n    \"git_worktree\": \"feature-xyz\"\n  },\n  \"version\": \"2.1.90\",\n  \"output_style\": {\n    \"name\": \"default\"\n  },\n  \"cost\": {\n    \"total_cost_usd\": 0.01234,\n    \"total_duration_ms\": 45000,\n    \"total_api_duration_ms\": 2300,\n    \"total_lines_added\": 156,\n    \"total_lines_removed\": 23\n  },\n  \"context_window\": {\n    \"total_input_tokens\": 15234,\n    \"total_output_tokens\": 4521,\n    \"context_window_size\": 200000,\n    \"used_percentage\": 8,\n    \"remaining_percentage\": 92,\n    \"current_usage\": {\n      \"input_tokens\": 8500,\n      \"output_tokens\": 1200,\n      \"cache_creation_input_tokens\": 5000,\n      \"cache_read_input_tokens\": 2000\n    }\n  },\n  \"exceeds_200k_tokens\": false,\n  \"rate_limits\": {\n    \"five_hour\": {\n      \"used_percentage\": 23.5,\n      \"resets_at\": 1738425600\n    },\n    \"seven_day\": {\n      \"used_percentage\": 41.2,\n      \"resets_at\": 1738857600\n    }\n  },\n  \"vim\": {\n    \"mode\": \"NORMAL\"\n  },\n  \"agent\": {\n    \"name\": \"security-reviewer\"\n  },\n  \"worktree\": {\n    \"name\": \"my-feature\",\n    \"path\": \"/path/to/.claude/worktrees/my-feature\",\n    \"branch\": \"worktree-my-feature\",\n    \"original_cwd\": \"/path/to/project\",\n    \"original_branch\": \"main\"\n  }\n}\n```\n\n**Fields that may be absent:**\n\n`session_name`\n\n-- only when set via`--name`\n\nor`/rename`\n\n`workspace.git_worktree`\n\n-- only inside a linked git worktree`vim`\n\n-- only when vim mode is enabled`agent`\n\n-- only when using`--agent`\n\n`worktree`\n\n-- only during`--worktree`\n\nsessions`rate_limits`\n\n-- only for Claude.ai Pro/Max after first API response\n\n**Fields that may be null:**\n\n`context_window.current_usage`\n\n--`null`\n\nbefore first API call`context_window.used_percentage`\n\n-- may be`null`\n\nearly in session\n\n| Tip | Details |\n|---|---|\nWhen does it update? |\nAfter each assistant message, permission mode change, or vim mode toggle. Debounced at 300ms. |\nNo API tokens used |\nStatus line runs locally -- completely free. |\nHides during prompts |\nTemporarily hidden during autocomplete, help menu, and permission prompts. |\nCan use any language |\nBash, Python, Node.js -- anything that reads stdin and prints to stdout. |\nTest your script |\nPipe sample JSON: `echo '{\"model\":{\"display_name\":\"Opus\"}}' |\n\nEvery setting lives in `settings.json`\n\n. There are three levels, loaded in order (later overrides earlier):\n\n| Level | Path | Scope |\n|---|---|---|\n| User | `~/.claude/settings.json` |\nAll projects on your machine |\n| Project | `.claude/settings.json` (in repo root) |\nEveryone on this repo |\n| Managed | `~/.claude/settings.managed.json` |\nEnterprise IT policy (read-only) |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`model` |\n`string` |\n`\"claude-sonnet-4-6\"` |\nDefault model for all sessions |\n`availableModels` |\n`string[]` |\nall | Restrict which models users can pick |\n`effortLevel` |\n`\"auto\" | \"low\" | \"medium\" | \"high\"` |\nvaries | Opus 4.6 reasoning depth — lower = faster & cheaper |\n`fastMode` |\n`boolean` |\n`false` |\n2.5x faster output, higher per-token cost (same model) |\n`fastModePerSessionOptIn` |\n`boolean` |\n`false` |\nRequire `/fast` each session instead of persisting |\n`language` |\n`string` |\n— | Preferred language for Claude's responses |\n`outputStyle` |\n`string` |\n`\"default\"` |\nResponse style: `default` , `Explanatory` , `Learning` , or custom |\n`alwaysThinkingEnabled` |\n`boolean` |\n`false` |\nExtended thinking on by default for all sessions |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`statusLine.type` |\n`\"command\"` |\n— | Must be `\"command\"` to enable a custom status line |\n`statusLine.command` |\n`string` |\n— | Shell command or script path that reads JSON stdin, prints status to stdout |\n`statusLine.padding` |\n`number` |\n`0` |\nExtra horizontal spacing characters around the status line content |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`permissions.defaultMode` |\n`string` |\n`\"default\"` |\nDefault permission mode: `default` , `plan` , `bypassPermissions` , etc. |\n`permissions.allow` |\n`string[]` |\n`[]` |\nTools always allowed without asking |\n`permissions.deny` |\n`string[]` |\n`[]` |\nTools always denied |\n`allowManagedPermissionRulesOnly` |\n`boolean` |\n`false` |\n(Managed only) Block user/project permission rules |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`spinnerTipsEnabled` |\n`boolean` |\n`true` |\nShow tips in the spinner while Claude works |\n`spinnerTipsOverride` |\n`object` |\n— | Custom tip messages for the spinner |\n`spinnerVerbs` |\n`object` |\n— | Custom verbs shown in spinner progress |\n`terminalProgressBarEnabled` |\n`boolean` |\n`true` |\nProgress bar in terminals that support it (Windows Terminal, iTerm2) |\n`showTurnDuration` |\n`boolean` |\n`true` |\nShow \"Cooked for 1m 6s\" after responses |\n`prefersReducedMotion` |\n`boolean` |\n`false` |\nDisable UI animations (spinners, shimmer, flash) for accessibility |\n`companyAnnouncements` |\n`string[]` |\n— | (Managed only) Startup messages, one picked randomly |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`enabledPlugins` |\n`object` |\n`{}` |\nMap of `\"plugin@marketplace\": true` to enable plugins |\n`extraKnownMarketplaces` |\n`object` |\n`{}` |\nAdditional plugin marketplace sources |\n`pluginConfigs` |\n`object` |\n`{}` |\nPer-plugin configuration (MCP user configs, etc.) |\n`skippedPlugins` |\n`string[]` |\n`[]` |\nPlugins you declined when prompted |\n`skippedMarketplaces` |\n`string[]` |\n`[]` |\nMarketplaces you declined when prompted |\n`strictKnownMarketplaces` |\n`string[]` |\n— | (Managed only) Allowlist of permitted marketplaces |\n`blockedMarketplaces` |\n`string[]` |\n— | (Managed only) Blocked marketplace sources |\n`pluginTrustMessage` |\n`string` |\n— | (Managed only) Custom message on plugin trust warning |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`enableAllProjectMcpServers` |\n`boolean` |\n`false` |\nAuto-approve all MCP servers in the project |\n`enabledMcpjsonServers` |\n`string[]` |\n`[]` |\nApproved MCP servers from `.mcp.json` |\n`disabledMcpjsonServers` |\n`string[]` |\n`[]` |\nRejected MCP servers from `.mcp.json` |\n`allowedMcpServers` |\n`string[]` |\n— | Enterprise allowlist (undefined = allow all) |\n`deniedMcpServers` |\n`string[]` |\n— | Enterprise denylist (takes precedence over allow) |\n`allowManagedMcpServersOnly` |\n`boolean` |\n`false` |\n(Managed only) Only admin-defined MCP servers apply |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`hooks` |\n`object` |\n`{}` |\nCustom commands before/after tool executions |\n`disableAllHooks` |\n`boolean` |\n`false` |\nKill all hooks and statusLine execution |\n`allowManagedHooksOnly` |\n`boolean` |\n`false` |\n(Managed only) Block user/project/plugin hooks |\n`allowedHttpHookUrls` |\n`string[]` |\n— | URL patterns HTTP hooks may target (supports `*` wildcard) |\n`httpHookAllowedEnvVars` |\n`string[]` |\n— | Env vars HTTP hooks may use in headers |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`respectGitignore` |\n`boolean` |\n`true` |\n`@` file picker respects `.gitignore` patterns |\n`autoMemoryEnabled` |\n`boolean` |\n`true` |\nAuto-save useful context to `.claude/memory/` |\n`claudeMdExcludes` |\n`string[]` |\n`[]` |\nGlob patterns for CLAUDE.md files to skip loading |\n`cleanupPeriodDays` |\n`integer` |\n— | Days to retain chat transcripts (0 = keep forever) |\n`plansDirectory` |\n`string` |\n`\"~/.claude/plans\"` |\nWhere plan files are stored |\n`fileSuggestion` |\n`object` |\n— | Custom script for `@` file autocomplete |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`apiKeyHelper` |\n`string` |\n— | Script path that outputs auth values |\n`awsCredentialExport` |\n`string` |\n— | Script that exports AWS credentials |\n`awsAuthRefresh` |\n`string` |\n— | Script that refreshes AWS auth |\n`forceLoginMethod` |\n`\"claudeai\" | \"console\"` |\n— | Force login via Claude Pro/Max or Console billing |\n`forceLoginOrgUUID` |\n`string` |\n— | Organization UUID for OAuth login |\n`otelHeadersHelper` |\n`string` |\n— | Script that outputs OpenTelemetry headers |\n\n| Setting | Type | Default | What It Does |\n|---|---|---|---|\n`includeGitInstructions` |\n`boolean` |\n`true` |\nInclude git commit/PR workflow instructions in system prompt |\n`attribution` |\n`object` |\n— | Customize attribution for git commits and PRs |\n`autoUpdatesChannel` |\n`\"stable\" | \"latest\"` |\n`\"latest\"` |\n`stable` = ~1 week old, skips regressions. `latest` = newest |\n`skipWebFetchPreflight` |\n`boolean` |\n`false` |\nSkip WebFetch blocklist check (enterprise) |\n`sandbox` |\n`object` |\n— | Sandbox execution configuration |\n`teammateMode` |\n`\"auto\" | \"tmux\" | \"iterm\" | \"in-process\"` |\n`\"auto\"` |\nHow agent team teammates display |\n`worktree` |\n`object` |\n— | Config for `--worktree` sessions |\n`env` |\n`object` |\n`{}` |\nEnvironment variables for sessions (many hidden settings live here) |\n\nThese go inside the `\"env\"`\n\nobject and unlock settings not available as top-level properties:\n\n| Variable | What It Does |\n|---|---|\n`CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` |\nMax parallel tool calls (default varies) |\n`CLAUDE_CODE_DISABLE_AUTO_MEMORY` |\n`1` to disable auto memory |\n`CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` |\n`1` to disable git instructions |\n`CLAUDE_CODE_EFFORT_LEVEL` |\nOverride effort level |\n`CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` |\n`1` to enable agent teams |\n`CLAUDE_CODE_ENABLE_TELEMETRY` |\n`1` to enable telemetry |\n`CLAUDE_CODE_DEBUG_LOG_LEVEL` |\n`verbose` for debug logging |\n`DISABLE_AUTOUPDATER` |\n`1` to disable auto-updates |\n`ANTHROPIC_MODEL` |\nRuntime model override |\n`CLAUDE_CODE_SUBAGENT_MODEL` |\nModel for subagents |", "url": "https://wpnews.pro/news/claude-code-status-line-complete-guide-all-fields-config-ready-to-use-scripts", "canonical_source": "https://gist.github.com/zaherkarp/afc4a5899b808be54badd46cde51e747", "published_at": "2026-06-24 18:21:28+00:00", "updated_at": "2026-06-24 18:38:47.175673+00:00", "lang": "en", "topics": ["developer-tools", "large-language-models", "ai-tools"], "entities": ["Claude Code", "VS Code", "Google Doc"], "alternates": {"html": "https://wpnews.pro/news/claude-code-status-line-complete-guide-all-fields-config-ready-to-use-scripts", "markdown": "https://wpnews.pro/news/claude-code-status-line-complete-guide-all-fields-config-ready-to-use-scripts.md", "text": "https://wpnews.pro/news/claude-code-status-line-complete-guide-all-fields-config-ready-to-use-scripts.txt", "jsonld": "https://wpnews.pro/news/claude-code-status-line-complete-guide-all-fields-config-ready-to-use-scripts.jsonld"}}