CLI Statusline A developer built a custom Bash statusline for the Antigravity CLI IDE that displays agent state, context window usage, Git VCS branch and status, tool and artifact counts, active background tasks, and current model. The statusline parses JSON input from stdin using a single jq pass for performance, then falls back to direct git commands for VCS information. It includes ANSI color formatting, human-readable token counts, and a shortened path display. Custom Antigravity Statusline This is a custom Bash statusline for the Antigravity CLI IDE. It displays the agent state, context window usage, Git VCS branch and status, tool and artifact counts, active background tasks, and current model. bash /bin/bash set -euo pipefail INPUT JSON=$ cat ─── ANSI Helpers Standard 16-color palette only ─────────────────────────── R="\033 0m" Reset B="\033 1m" Bold D="\033 2m" Dim I="\033 3m" Italic Foreground accents Standard 16 colors FG BLACK="\033 30m" FG RED="\033 31m" FG GREEN="\033 32m" FG YELLOW="\033 33m" FG BLUE="\033 34m" FG MAGENTA="\033 35m" FG CYAN="\033 36m" FG WHITE="\033 37m" FG GRAY="\033 90m" FG BRIGHT RED="\033 91m" FG BRIGHT GREEN="\033 92m" FG BRIGHT YELLOW="\033 93m" FG BRIGHT BLUE="\033 94m" FG BRIGHT MAGENTA="\033 95m" FG BRIGHT CYAN="\033 96m" FG BRIGHT WHITE="\033 97m" Number Highlight Color NUM COLOR="${FG BRIGHT WHITE}${B}" ─── Parse JSON from stdin Single jq pass for performance ────────────────── { read -r STATE read -r USED PCT read -r VCS BRANCH read -r VCS DIRTY read -r VCS TYPE read -r VCS CLIENT read -r SANDBOX read -r SANDBOX NET read -r ARTIFACTS read -r SUBAGENTS read -r BG TASKS read -r MODEL ID read -r MODEL NAME read -r COLS read -r CWD read -r CONV ID read -r PRODUCT read -r INPUT TOKENS read -r OUTPUT TOKENS read -r CTX LIMIT read -r CTX USED read -r REM PCT } <<< "$ echo "$INPUT JSON" | jq -r ' .agent state // "idle" , .context window.used percentage // 0 , .vcs.branch // "" , .vcs.dirty // false , .vcs.type // "" , .vcs.client // "" , .sandbox.enabled // false , .sandbox.allow network // false , .artifact count // 0 , if .subagents | type == "array" then .subagents | length else 0 end , .task count // 0 , .model.id // "" , .model.display name // "" , .terminal width // 80 , .cwd // "" , .conversation id // "" , .product // "" , .context window.total input tokens // 0 , .context window.total output tokens // 0 , .context window.context window size // 0 , .context window.total input tokens // 0 + .context window.total output tokens // 0 , .context window.remaining percentage // 100 ' 2 /dev/null || printf "idle\n0\n\nfalse\n\n\nfalse\nfalse\n0\n0\n0\n\n\n80\n\n\n\n0\n0\n0\n0\n100\n" " ─── Separators ────────────────────────────────────────────────────────────── DOT="${FG GRAY} | ${R}" ─── VCS directly from git bypasses JSON parsing entirely ────────────────── GIT DIR="${CWD:-.}" VCS BRANCH=$ git -C "$GIT DIR" rev-parse --abbrev-ref HEAD 2 /dev/null || echo "" if -n "$VCS BRANCH" ; then VCS TYPE="git" if git -C "$GIT DIR" status --porcelain 2 /dev/null | grep -q .; then VCS DIRTY="true" else VCS DIRTY="false" fi else VCS TYPE="" VCS DIRTY="false" fi ─── Computed & Formatted Values ───────────────────────────────────────────── PCT FMT=$ LC NUMERIC=C printf "%.1f" "$USED PCT" PCT INT=${USED PCT%. }; PCT INT=${PCT INT:-0} human format { local num=$1 if -z "$num" || "$num" -eq 0 2 /dev/null; then echo "0" return fi if "$num" -ge 1000000 2 /dev/null; then echo "$ num / 1000000 .$ num % 1000000 / 100000 M" elif "$num" -ge 1000 2 /dev/null; then echo "$ num / 1000 .$ num % 1000 / 100 K" else echo "$num" fi } INPUT TOK FMT=$ human format "$INPUT TOKENS" OUTPUT TOK FMT=$ human format "$OUTPUT TOKENS" CTX LIMIT FMT=$ human format "$CTX LIMIT" CTX USED FMT=$ human format "$CTX USED" shorten path { local path=$1 if -z "$path" ; then echo "" return fi path="${path/ $HOME/\~}" if "${ path}" -gt 25 ; then echo "...$ basename "$path" " else echo "$path" fi } CWD SHORT=$ shorten path "$CWD" ─── Strip ANSI escapes to measure visible length ──────────────────────────── visible len { Strips ESC sequences and counts remaining bytes printf '%s' "$ echo -e "$1" | sed 's/\x1b\ 0-9; m//g' " | wc -m } ─── State Indicator ───────────────────────────────────────────────────────── case "$STATE" in idle S="${FG BRIGHT GREEN}${B}  READY${R}" ;; thinking S="${FG BRIGHT YELLOW}${B} 󰟷 THINKING${R}" ;; working S="${FG BRIGHT CYAN}${B}  WORKING${R}" ;; tool use S="${FG BRIGHT MAGENTA}${B}  TOOL${R}" ;; S="${FG WHITE}${B}  $ echo "$STATE" | tr ' :lower: ' ' :upper: ' ${R}" ;; esac ─── VCS Branch & Type fixed: color applied correctly in both branches ───── V="" if -n "$VCS BRANCH" ; then VCS LABEL="${VCS TYPE:-git}" if "$VCS DIRTY" = "true" ; then V="${DOT}${R}${FG BRIGHT RED} ${VCS BRANCH}${FG BRIGHT YELLOW} ${R}" else V="${DOT}${R}${FG BRIGHT BLUE} ${VCS BRANCH}${R}" fi fi ─── Model ─────────────────────────────────────────────────────────────────── MODEL DISP=" ${R}${MODEL NAME:-$MODEL ID}" M="" if -n "$MODEL DISP" ; then M="${FG GRAY}${DOT}${FG BRIGHT MAGENTA}${I}${MODEL DISP}${R}" fi ─── Sandbox Badge ─────────────────────────────────────────────────────────── if "$SANDBOX" = "true" ; then if "$SANDBOX NET" = "true" ; then SB="${FG GREEN}󰒙 ${FG BRIGHT GREEN}${B}ON net ${R}" else SB="${FG GREEN}󰴴 ${FG BRIGHT GREEN}${B}ON no-net ${R}" fi else SB="${FG RED}󰦜 ${FG BRIGHT RED}${B}OFF${R}" fi ─── Context Bar 20 segments ─────────────────────────────────────────────── BAR LEN=20 FILLED=$ PCT INT BAR LEN / 100 REMAINDER=$ PCT INT BAR LEN % 100 if "$PCT INT" -ge 90 ; then FILL COLOR="$FG BRIGHT RED" elif "$PCT INT" -ge 60 ; then FILL COLOR="$FG BRIGHT YELLOW" else FILL COLOR="$FG YELLOW" fi BAR="" for i = 0; i < BAR LEN; i++ ; do if "$i" -lt "$FILLED" ; then BAR="${BAR}${FILL COLOR}█${R}" elif "$i" -eq "$FILLED" ; then if "$REMAINDER" -ge 75 ; then BAR="${BAR}${FILL COLOR}▓${R}${FG GRAY}" elif "$REMAINDER" -ge 50 ; then BAR="${BAR}${FILL COLOR}▒${R}${FG GRAY}" else BAR="${BAR}${FILL COLOR}░${R}${FG GRAY}" fi else BAR="${BAR}${FG GRAY}░${R}" fi done ─── Stats & Metadata formatting ───────────────────────────────────────────── CTX BAR="${FG YELLOW}󱍏 ${R}${BAR} ${NUM COLOR}${PCT FMT}%${R}" ART FMT="${FG BLUE} ${NUM COLOR}${ARTIFACTS}${R}" SUB FMT="${FG CYAN}󱙺 ${NUM COLOR}${SUBAGENTS}${R}" BG FMT="${FG MAGENTA} ${NUM COLOR}${BG TASKS}${R}" DIR FMT="" if -n "$CWD SHORT" ; then DIR FMT="${FG GRAY}${DOT}${FG CYAN} ${R}${CWD SHORT}${R}" fi CONV FMT="" if -n "$CONV ID" ; then CONV FMT="${FG GRAY}${DOT}${FG GRAY}󰍪 ${CONV ID:0:8}${R}" fi TOK DETAILS="" if "$CTX USED" -gt 0 2 /dev/null; then TOK DETAILS=" ${CTX USED FMT}/${CTX LIMIT FMT} " fi ─── Right-align helper ────────────────────────────────────────────────────── Prints LINE1 left-aligned and LINE2 right-aligned on the same terminal row. print right aligned { local left="$1" local right="$2" local total cols="$3" local left vis right vis pad left vis=$ visible len "$left" right vis=$ visible len "$right" How many spaces needed between left and right pad=$ total cols - left vis - right vis "$pad" -lt 1 && pad=1 printf "%b% s%b\n" "$left" "$pad" "" "$right" } ─── Output Assembly ───────────────────────────────────────────────────────── if "$COLS" -ge 180 ; then LINE1="${S}${M}${DIR FMT}${V}${CONV FMT}" if "$CTX USED" -gt 0 2 /dev/null; then TOK DETAILS=" ${CTX USED FMT}/${CTX LIMIT FMT} ${DOT}${FG YELLOW} ${R} ${INPUT TOK FMT} in/${OUTPUT TOK FMT} out " fi LINE2="${ART FMT}${DOT}${SUB FMT}${DOT}${BG FMT}${DOT}${SB}${DOT}${CTX BAR}${TOK DETAILS}" print right aligned "$LINE1" "$LINE2" "$COLS" elif "$COLS" -ge 90 ; then Medium Layout: Two-line layout with border LINE1="${S}${M}${DIR FMT}${V}" LINE2=" ${CTX BAR}${TOK DETAILS}${DOT}${ART FMT}${DOT}${SUB FMT}${DOT}${BG FMT}${DOT}${SB}" echo -e "${FG GRAY}╭─${R}${LINE1}" echo -e "${FG GRAY}╰─${R}${LINE2}" else M SHORT="" if -n "$MODEL DISP" ; then M SHORT="${FG GRAY} ╱ ${FG BRIGHT MAGENTA}${MODEL DISP}${R}" fi echo -e "${S}${M SHORT}" echo -e "${CTX BAR}${DOT}${BG FMT}" fi