# CShip
CShip (pronounced "sea ship") is a customizable statusline for [[Claude Code]]. It reads Claude Code's live JSON feed and renders session cost, context window usage, model name, API usage limits, vim mode and agent name, all configured through a single TOML file. [[Rust]], Apache-2.0, by Stephen Leo.
## What it does
- **Starship-compatible TOML config.** Every module configurable: colours, symbols, thresholds. If you have configured Starship, you already know the format
- **Starship passthrough.** Embed any actual Starship module (git branch, directory, language runtimes) alongside native CShip modules, rather than reimplementing them
- **Per-module warn and critical thresholds**, each with its own colour. So context usage can go amber at 60% and red at 85%, and cost can have entirely different bounds
- **A ≤10ms render budget.** The statusline redraws constantly; a slow one is a tax on every interaction
Install wires itself up:
```sh
curl -fsSL https://cship.dev/install.sh | bash # macOS / Linux
irm https://cship.dev/install.ps1 | iex # Windows
cargo install cship # then wire statusLine manually
```
The installer detects OS and architecture, drops the binary in `~/.local/bin`, writes a starter `~/.config/cship.toml`, and registers the `statusLine` entry in `~/.claude/settings.json`. Optional dependencies (Starship for passthrough, `libsecret-tools` on Linux for usage limits) are prompted interactively, auto-installed with `--yes`, or skipped in a non-TTY environment like CI or a Docker build.
That last detail is the sign of someone who has actually shipped installers.
## Versus Claude Epic Status Line
I already have a note on [[Claude Epic Status Line]], and these solve the same problem differently.
Epic Status Line is a feature-rich implementation: colours, rate limits, git info, session cost, worktree detection, auto-compact warnings, all decided for you. CShip is a **configuration surface**: fewer opinions, a config language you may already know, and a passthrough escape hatch to Starship for anything it doesn't do natively.
Pick by temperament. If the built-in set matches what you want to see, take the one that already shows it. If you want to decide exactly which modules appear and at what thresholds they change colour, CShip is the one that bends.
## Why I keep this note
**The statusline is the only always-visible surface in an agent session.** Everything else scrolls away. What sits there decides what you notice without looking for it, and the two things worth noticing during long agent runs are context filling up and money being spent. Both are invisible failures otherwise: you find out about the first when quality degrades, and about the second at the end of the month.
**Configurable thresholds are the actual feature**, more than the colours. A number on screen you never react to is decoration. A number that changes colour at a bound you chose is a signal, and choosing the bound is the part that makes it yours.
Worth a session to configure once, given how many hours a week I spend looking at exactly this line.
## References
- [cship.dev](https://cship.dev/) — home
- [stephenleo/cship](https://github.com/stephenleo/cship) — source
- [Configuration guide](https://cship.dev/configuration.html)
- [Showcase](https://cship.dev/showcase.html)
- [FAQ](https://cship.dev/faq.html)
- [crates.io](https://crates.io/crates/cship)
- [Starship](https://starship.rs) — the config format it borrows, and the passthrough target
## Related
- [[Claude Code]]
- [[Claude Epic Status Line]]
- [[Claude Code Configuration]]
- [[Rust]]
- [[Open Source]]