/statusline: Build Your Dream Status Bar for Claude Code

Published: (January 18, 2026 at 01:30 PM EST)
5 min read
Source: Dev.to

Source: Dev.to

The Problem

Standard terminals and AI interfaces give you what they think you need. The problem is, they’re often wrong—or at least incomplete.

  • You’re working across multiple Git branches and need constant visibility of which one you’re on.
  • You’re budget‑conscious and want to track token usage in real‑time.
  • You’re a freelancer tracking billable time.
  • You work across time zones and need to know the time in Tokyo before you send a message.

The default answer is: “Open another terminal tab,” “Check a different app,” or “Just remember it.”
All of these require context‑switching, add friction, and make you do work that your tools should handle for you.

The Solution

Claude Code’s /statusline command puts a customizable information bar at the bottom of your interface. You decide what goes there—the possibilities are genuinely endless.

How to Use It

Basic usage

/statusline

Running the command opens the status‑line configuration UI, where you can define what information appears and how it’s formatted.

Quick configuration example

/statusline git:branch model tokens

Now the statusline shows:

  • Current Git branch
  • Active Claude model
  • Token usage for the session

Built‑in Information Types

ComponentWhat it shows
git:branchCurrent Git branch
git:statusClean/dirty working directory
modelCurrent Claude model
tokensTokens used in session
tokens:remainingEstimated tokens remaining
timeCurrent time
sessionCurrent session name
cwdCurrent working directory

Example configuration

/statusline git:branch git:status | model | tokens | time

Result

main ● | claude-3-opus | 12,847 tokens | 14:32

Custom Commands and Scripts

You can add any command output to your statusline.

Weather

/statusline "$(curl -s wttr.in/?format=%t)"

Bitcoin price

/statusline "BTC: $(curl -s https://api.coindesk.com/v1/bpi/currentprice.json \
               | jq -r '.bpi.USD.rate')"

System load

/statusline "Load: $(uptime | awk -F'load average:' '{print $2}' | cut -d, -f1)"

Pomodoro timer

/statusline "$(cat ~/.pomodoro_status 2>/dev/null || echo 'No timer')"

Prayer times (for those who observe)

/statusline "Next prayer: $(~/.scripts/next_prayer.sh)"

Wordle streak

/statusline "🟩 Wordle: $(cat ~/.wordle_streak)"

Yes, really. If you can get it from the command line, you can put it in your statusline.

Pro Tips

TipAdvice
🎯 Tip 1Keep it scannable. The statusline is most useful when you can glance at it and get the info in under a second. Don’t cram too much.
🎯 Tip 2Use separators wisely. Pipe characters (`
🎯 Tip 3Create context‑specific statuslines. Different projects need different info. Save configurations and switch between them.
🎯 Tip 4Refresh intervals matter. For dynamic data (like API prices), consider the refresh rate. You probably don’t need second‑by‑second Bitcoin updates while debugging code.
🎯 Tip 5Combine with tmux/screen. If you’re already using terminal multiplexers, coordinate your statuslines to avoid redundant information.

Example aliases for Tip 3

# In your shell config
alias statusline-work="/path/to/claude statusline git:branch jira-ticket model tokens"
alias statusline-personal="/path/to/claude statusline git:branch weather time"

Real‑World Use Cases

Alex — The DevOps Engineer

/statusline git:branch | "k8s: $(kubectl config current-context)" \
          | "pods: $(kubectl get pods --no-headers | wc -l)" | time

Result

main | k8s: prod-cluster | pods: 47 | 16:22

Alex always knows the current branch, which Kubernetes cluster is active, and how many pods are running—essential for someone who could accidentally deploy to production.

Jordan — The Freelance Developer

/statusline session | tokens | "$( ~/.scripts/billable_time.sh )" \
          | "Rate: $$(~/.scripts/hourly_rate.sh)"

Result

client‑acme‑api | 8,234 tokens | 2h 34m billable | Rate: $127.50

Jordan can see the client session, token usage, billable time, and hourly rate at a glance.

Maya — The Remote Full‑Stack Developer

/statusline git:branch | time | "BTC: $(curl -s https://api.coindesk.com/v1/bpi/currentprice.json \
               | jq -r '.bpi.USD.rate')" | "Prayer: $(~/.scripts/next_prayer.sh)"

Result

feature/login | 09:45 | BTC: 28,734.12 | Prayer: 10:12

Maya stays on top of her Git work, local time, Bitcoin price, and upcoming prayer time without leaving the terminal.

Get Started

  1. Open Claude Code.
  2. Run /statusline.
  3. Add the components you need, using built‑in tags or custom command substitutions.
  4. Press Enter to save.

Your terminal now works for you, not the other way around. Happy coding!

Green Mode

Tracks the session, token usage for cost estimates, billable time, and current calculated rate. Invoicing just got easier.

Morgan — The Focused Developer

/statusline git:branch | model | "Focus: $(($(date +%s) - $(cat ~/.focus_start))) seconds"

Morgan’s statusline shows:

feature/auth | claude-3.5-sonnet | Focus: 2847 seconds

Minimal distractions. Just the branch, the model, and a focus timer to encourage deep work.

Building Your Perfect Setup

Here’s a process for building your ideal statusline:

  • Start minimal. Begin with just git branch and tokens. Use it for a day.
  • Notice what you’re checking manually. Every time you switch to another window for information, ask: “Could this be in my statusline?”
  • Add incrementally. One new component at a time. See if it adds value or just noise.
  • Iterate ruthlessly. If you haven’t looked at a statusline component in a week, remove it.
  • Context‑switch your statusline. Different projects might need different setups. That’s fine.

Conclusion

The /statusline feature embodies a philosophy: your tools should adapt to you, not the other way around.

Whether you need practical git information, token tracking for budget management, or—yes—your Wordle streak, Claude Code’s statusline puts it where you need it. No extra windows. No context switching. Just a glance and you know.

The best statusline is the one you build for yourself. So build it.

Tomorrow in Day 15: We’re going full no‑limits. What if Claude Code never asked for permission again? Enter YOLO mode: --dangerously-skip-permissions. It’s powerful. It’s risky. It has “danger” right in the name. Let’s talk about when to use it. ⚠️

What’s on your statusline? Share your setup and follow along for the rest of the 31 Days of Claude Code Features!

Back to Blog

Related posts

Read more »