Skip to content

zeroblack/vibeline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

14 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

vibeline

An emoji-first statusline for Claude Code that shows your session's mood.

shellcheck License: MIT

Instead of a flat clock ticking up, watch your session evolve: 🌱 fresh start β†’ β˜• warmed up β†’ πŸ”₯ in flow β†’ πŸš€ launched β†’ πŸ’ͺ strong β†’ πŸ§™ wizard hours β†’ 🧟 zombie β†’ πŸ‘» past midnight.

demo

Why

Existing statuslines tell you facts. vibeline tells you how the session feels.

It's emoji-first on purpose, built for the long sessions β€” the kind where you forget what time it is. It keeps you connected to the session and to your own sense of time and space without asking you to read a single number.

I made it for me. If it's useful to you too, even better.

What you see

Two lines β€” identity on top, metrics below. Long session names never push anything off-screen.

Line 1 β€” where you are

  • 🧠 model β€” Opus, 🎡 Sonnet, or πŸƒ Haiku
  • πŸ“ location β€” current folder + git branch, dirty file count, ahead/behind
  • πŸ’¬ session name β€” whatever Claude Code has named this session

Line 2 β€” how it's going

  • 🎯 tasks β€” pending/in-progress/done for the current session's TodoWrite list (1βš™ 2βœ“). Falls back to πŸ“‹ code markers (TODO / FIXME / XXX / HACK) when no session tasks exist
  • πŸš€ elapsed β€” how long you've been at it, with an emoji that evolves every stage
  • πŸ’° cost β€” session spend, colored by tier. ⚑ flashes when it grows
  • 🌊 plan usage β€” session bar (πŸŒŠβ†’πŸŒ€β†’πŸŒͺβ†’β›ˆοΈ) and weekly bar (πŸŒ‘β†’πŸŒ’β†’πŸŒ“β†’πŸŒ”β†’πŸŒ•) against your Max/Pro quota. Approximate, needs calibration per plan
  • 🟒 context β€” 5-dot usage bar for the context window
  • πŸŒ† clock β€” wall time, with a different icon for dawn / day / evening / night

Install

1. Download the script:

curl -fsSL https://raw.githubusercontent.com/zeroblack/vibeline/main/install.sh | bash

This pulls statusline.sh into ~/.claude/, makes it executable, and asks if you want to register it automatically.

If you prefer to do it yourself:

curl -fsSL https://raw.githubusercontent.com/zeroblack/vibeline/main/statusline.sh -o ~/.claude/statusline.sh
chmod +x ~/.claude/statusline.sh

2. Register it in ~/.claude/settings.json:

{
  "statusLine": {
    "type": "command",
    "command": "/bin/bash ~/.claude/statusline.sh"
  }
}

3. Restart Claude Code. That's it.

On a Claude subscription?

Pick the value that matches your plan. The prefix ~ in the cost signals "theoretical" (you pay a flat fee, not per token), and the usage bars get the right quota baseline:

Your plan CCSL_PLAN Session baseline Weekly baseline
Pro ($20/mo) pro 50M tokens 325M tokens
Max 5x ($100/mo) max5 250M tokens 1.625B tokens
Max 20x ($200/mo) max20 1B tokens 6.5B tokens
"command": "CCSL_PLAN=max5 /bin/bash ~/.claude/statusline.sh"

A note on the numbers. Anthropic publishes plan limits as relative multipliers (Max 5x / Max 20x) and as ranges of Sonnet-hours per week β€” not as exact token quotas. The baselines above respect the 5x / 20x ratio officially, but the absolute numbers are calibrated best-guesses. The bars show ~ to make this explicit. If yours don't match /usage, override them (see below).

Legacy note: CCSL_PLAN=max still works as an alias for max5 for backwards compatibility.

Calibrate against /usage

  1. Open /usage in Claude Code, note the session and weekly percentages
  2. Compare to what vibeline shows (e.g. vibeline says ~67%, /usage says 53%)
  3. Look up the raw tokens vibeline measured: cat ~/.claude/cache/statusline/usage
  4. Compute your real quota: quota = tokens Γ· (real_pct / 100)
  5. Lock it in:
    "command": "CCSL_PLAN=max20 CCSL_SESSION_QUOTA_TOKENS=1000000000 CCSL_WEEK_QUOTA_TOKENS=6500000000 /bin/bash ~/.claude/statusline.sh"

Customize

Every option is an environment variable β€” you set them by prepending them to the command string in settings.json. No config file.

Recipes

Hide cost and clock (privacy-friendly):

"command": "CCSL_SHOW_COST=0 CCSL_SHOW_CLOCK=0 /bin/bash ~/.claude/statusline.sh"

Minimal β€” just model, folder, git, context bar:

"command": "CCSL_SHOW_TODOS=0 CCSL_SHOW_SESSION_NAME=0 CCSL_SHOW_ELAPSED=0 CCSL_SHOW_COST=0 CCSL_SHOW_CLOCK=0 /bin/bash ~/.claude/statusline.sh"

Track custom keywords β€” add OPTIMIZE and REVIEW alongside the defaults:

"command": "CCSL_TODO_PATTERN='(TODO|FIXME|XXX|HACK|OPTIMIZE|REVIEW)' /bin/bash ~/.claude/statusline.sh"

All variables

Set any of these to 0 to hide that segment. Leave them alone to keep the default layout.

Variable Default What it controls
CCSL_SHOW_COST 1 πŸ’° cost segment
CCSL_SHOW_ACTIVITY 1 ⚑ flash on cost growth
CCSL_SHOW_TODOS 1 πŸ“‹ TODO counter
CCSL_SHOW_SESSION_NAME 1 πŸ’¬ session name
CCSL_SHOW_ELAPSED 1 evolving time emoji
CCSL_SHOW_CONTEXT 1 context usage bar
CCSL_SHOW_CLOCK 1 wall clock
CCSL_SHOW_USAGE 1 🌊 plan usage bars (session + week)
CCSL_PLAN api pro, max5, or max20 β€” unlocks cost prefix and usage bars (max is still accepted as alias for max5)
CCSL_SESSION_QUOTA_TOKENS auto override 5h session token quota (calibrate vs /usage)
CCSL_WEEK_QUOTA_TOKENS auto override weekly token quota
CCSL_USAGE_TTL 60 seconds to cache usage aggregation
CCSL_TODO_PATTERN (TODO|FIXME|XXX|HACK) regex of keywords to count
CCSL_TODO_TTL 60 seconds to cache code marker count
CCSL_TASK_TTL 15 seconds to cache session task read
CCSL_ACTIVITY_LINGER 3 seconds ⚑ stays visible
CCSL_CACHE_DIR ~/.claude/cache/statusline cache location
CCSL_SESSIONS_DIR ~/.claude/sessions Claude Code session store
CCSL_PROJECTS_DIR ~/.claude/projects Claude Code projects store (read for token aggregation)

The model, folder, and git branch segments always show when relevant β€” they anchor line 1. If every variable on line 2 is set to 0, the second line disappears and you get a single-line statusline.

Elapsed time progression

Range Emoji
< 15m 🌱 fresh start
15m – 45m β˜• warmed up
45m – 90m πŸ”₯ in flow
1.5h – 3h πŸš€ launched
3h – 4h ⚑ charged
4h – 5h πŸ’ͺ strong
5h – 6h 🦾 bionic
6h – 8h πŸŒ‹ erupting
8h – 10h πŸ§™ wizard hours
10h – 12h πŸ¦‰ night owl
12h – 16h 🧟 zombie
16h – 20h πŸ’€ skull
20h – 24h ☠️ danger zone
> 24h πŸ‘» ghost

Requirements

  • bash 3.2+
  • jq
  • awk
  • git (optional, only for branch and TODO segments)
  • A terminal with emoji support

Tested on macOS and Linux. Works inside Claude Code's TUI, iTerm2, WezTerm, Alacritty, and Kitty.

Uninstall

rm ~/.claude/statusline.sh
rm -rf ~/.claude/cache/statusline

Then remove the statusLine key from ~/.claude/settings.json.

Usage bar progression

Session (5h) Week (7d)
< 50% 🌊 calm < 25% πŸŒ‘ new moon
50 – 75% πŸŒ€ riptide 25 – 50% πŸŒ’ waxing crescent
75 – 90% πŸŒͺ cyclone 50 – 75% πŸŒ“ first quarter
β‰₯ 90% β›ˆοΈ storm 75 – 90% πŸŒ” waxing gibbous
β‰₯ 90% πŸŒ• full moon

Why not ccstatusline?

ccstatusline is excellent and fully configurable. vibeline is a different take:

  • Emoji as vocabulary, not decoration β€” every icon names its category, and the category has a progression (session evolves πŸŒ±β†’β˜•β†’πŸ”₯β†’πŸ§™, the plan usage evolves πŸŒŠβ†’πŸŒ€β†’πŸŒͺβ†’β›ˆοΈ, the week fills like the moon πŸŒ‘β†’πŸŒ’β†’πŸŒ“β†’πŸŒ•)
  • Progression over counters β€” a 3-hour session should feel different than a 30-minute one, even before you read the number
  • Zero config β€” one Bash file, no npm chain, no runtime beyond what every dev machine already has

Use ccstatusline if you want every possible number on screen. Use vibeline if you want one that tells you how long you've been at it with a πŸ§™ or a 🧟.

Contributing

See CONTRIBUTING.md.

Credits

Token-window aggregation over local JSONL was inspired by ccusage by @ryoppippi β€” MIT-licensed. The math (rolling 5h session and 7-day windows, summing input + output + cache_creation + cache_read) follows their approach; vibeline reimplements it in Bash to stay dependency-free.

License

MIT β€” see LICENSE.


Built by Dioni.

About

An emoji-first statusline for Claude Code that reflects the mood of your coding session. Evolving time icons, git branch, TODO radar, cost meter, and contextual clock. Zero config, single bash file.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages