{"id":48218471,"url":"https://github.com/gradigit/clickline","last_synced_at":"2026-04-04T19:03:16.177Z","repository":{"id":339407764,"uuid":"1161688193","full_name":"gradigit/clickline","owner":"gradigit","description":"Compact, clickable statusline for Claude Code — OSC-8 hyperlinks, 10 color themes, custom items, per-repo service links, interactive TUI configurator","archived":false,"fork":false,"pushed_at":"2026-03-07T18:21:28.000Z","size":93,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-07T23:53:19.367Z","etag":null,"topics":["claude-code","cli","osc8","statusline","terminal"],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gradigit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-19T11:58:07.000Z","updated_at":"2026-03-07T18:21:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/gradigit/clickline","commit_stats":null,"previous_names":["gradigit/clickline"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gradigit/clickline","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gradigit%2Fclickline","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gradigit%2Fclickline/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gradigit%2Fclickline/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gradigit%2Fclickline/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gradigit","download_url":"https://codeload.github.com/gradigit/clickline/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gradigit%2Fclickline/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31409471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","cli","osc8","statusline","terminal"],"created_at":"2026-04-04T19:03:02.936Z","updated_at":"2026-04-04T19:03:16.148Z","avatar_url":"https://github.com/gradigit.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# clickline\n\nCompact, clickable, customizable statusline for [Claude Code](https://claude.ai/code). Every element that can be a link is one — Cmd+click your working directory, git branch, PR, or quota directly from the statusline.\n\n![preview](preview.svg)\n\n## Features\n\n- **OSC-8 hyperlinks** — path opens in Finder/editor, branch opens on GitHub, quota opens claude.ai, cost opens your session transcript\n- **Configurable layout** — split elements across one or two lines, reorder freely, toggle each on/off\n- **10 color themes** — Catppuccin, Dracula, Tokyo Night, Gruvbox, Nord, Solarized, One Dark, Rosé Pine\n- **Custom items** — add your own shell-driven statusline segments with caching and conditional display\n- **Per-repo items** — `.clickline` file for repo-local service links (Railway, Vercel, Supabase, etc.), shareable via git\n- **Interactive configurator** — TUI (Textual) or bash wizard to choose elements, theme, and layout\n- **Smart truncation** — long paths show last 2 segments, branch names cap at 25 chars\n- **PR + CI** — open PR number (clickable), \"New PR\" shortcut, CI status ✓ ✗ ⋯ (all async, never blocks)\n- **Quota tracking** — 5-hour and 7-day usage with time-until-reset, cached and stale-while-revalidated\n- **Context window** — percentage + max size, with ⚠️ / 🚨 warnings at 60% and 80%\n- **Dirty indicator** — ·N shows count of modified/staged files after branch name\n\n## Requirements\n\n- [Ghostty](https://ghostty.org) — OSC-8 and 24-bit color support required (iTerm2, WezTerm also work)\n- [Claude Code](https://claude.ai/code)\n- `jq`, `git`, `curl`\n- macOS or Linux\n- `gh` CLI — optional, needed for PR and CI features\n- `python3` + `textual` — optional, for the graphical configurator (auto-installed via `uv` during install); falls back to a bash wizard\n\n## Installation\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/gradigit/clickline/main/install.sh | bash\n```\n\nThe installer will:\n1. Check dependencies (`jq`, `git`, `curl`) and offer to install any missing ones\n2. Launch the TUI configurator (auto-installs [`uv`](https://docs.astral.sh/uv/) + `textual` if needed), or fall back to a bash wizard\n3. Choose a preset (Minimal, Clean, Standard, Developer, Full)\n4. Pick a color theme from 10 options\n5. Choose layout arrangement and path click target\n6. Write `~/.claude/clickline.conf` with your settings\n7. Copy `statusline.sh` to `~/.claude/statusline.sh`\n8. Update `~/.claude/settings.json`\n\n### Reconfigure\n\nRun the installer again at any time to change settings. Changes take effect on the next Claude Code response — no restart needed.\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/gradigit/clickline/main/install.sh | bash\n# or, if you cloned the repo:\nbash install.sh\n```\n\n### Manual install\n\n```sh\ncurl -o ~/.claude/statusline.sh https://raw.githubusercontent.com/gradigit/clickline/main/statusline.sh\nchmod +x ~/.claude/statusline.sh\ncp clickline.conf.default ~/.claude/clickline.conf\n```\n\nThen add to `~/.claude/settings.json`:\n\n```json\n{\n  \"statusLine\": {\n    \"type\": \"command\",\n    \"command\": \"/bin/bash /Users/YOU/.claude/statusline.sh\",\n    \"timeout\": 5000\n  }\n}\n```\n\n### Install via Claude Code\n\nPaste the GitHub link or ask Claude Code:\n\n\u003e \"Install clickline\" — or just paste `https://github.com/gradigit/clickline`\n\nClaude Code will download the files, check dependencies, then walk you through preset, theme, and layout selection with side-by-side ASCII previews of each option.\n\n**AI agents:** read [`INSTALL.md`](INSTALL.md) for the full step-by-step install and configuration flow.\n\n## Configurator\n\nThe TUI configurator gives you a live preview, drag-and-drop layout editing, theme switcher, and preset selector:\n\n![configurator](configurator.svg)\n\n```sh\npython3 ~/.claude/clickline-configure.py\n```\n\nThe installer auto-installs `uv` and `textual` if needed. To run the configurator manually:\n\n```sh\n# If you have textual installed:\npython3 ~/.claude/clickline-configure.py\n# Otherwise, via uv (no install needed):\nuv run --with textual python3 ~/.claude/clickline-configure.py\n```\n\nFalls back to the bash wizard if Textual is unavailable.\n\n### TUI hotkeys\n\n| Key | Action |\n|---|---|\n| `s` | Save config and exit |\n| `q` / `Escape` | Quit without saving |\n| `Tab` | Switch between Layout and Elements panes |\n| `↑` `↓` | Navigate items |\n| `Shift+↑` `Shift+↓` | Reorder items in layout |\n| `n` | Insert line break |\n| `d` | Delete item from layout |\n| `Space` | Toggle element on/off (in Elements pane) |\n| `o` | Open options panel |\n| `p` | Apply preset (Minimal, Clean, Standard, Developer, Full) |\n| `t` | Switch color theme |\n| `c` | Add custom element |\n| `r` | Add repo item (.clickline) |\n| `?` | Show help |\n\n## What's clickable\n\n| Element | Destination |\n|---|---|\n| Working directory | `file://` — opens in Finder / VS Code / Cursor |\n| Git branch | `https://github.com/owner/repo/tree/branch` |\n| PR `#N` | Pull request page |\n| `New PR` | GitHub compare page to open a PR |\n| CI symbol (✓ ✗ ⋯) | GitHub Actions run page |\n| 5h quota % | `https://claude.ai/settings/usage` |\n| 7d quota % | `https://claude.ai/settings/usage` |\n| `Quota —` (unavailable) | `https://claude.ai/settings/usage` |\n| Commit hash | `https://github.com/owner/repo/commit/SHA` |\n| Model name | `https://docs.anthropic.com/en/docs/about-claude/models/overview` |\n| Version | `https://github.com/anthropics/claude-code/releases` |\n| Session cost | `file://` — opens session transcript (JSONL) |\n\nOSC-8 links require a terminal that supports them. Ghostty, iTerm2, and WezTerm all do. Cmd+click (macOS) activates the link.\n\n## Layout\n\n```\nmy-app/src · feat/dark-mode·3 ↑2 │ #42 │ ✓ │ Claude Sonnet 4.6\n35%/200K │ 85% (2h3m) · 61% (3d5h) │ $4\n```\n\n**Line 1:** `path [· branch [·dirty] [↑N ↓N]] [│ commit] [│ PR] [│ CI] [│ model [thinking]] [│ version] [│ VIM] [│ agent]`\n\n**Line 2:** `ctx%/maxK [warn] │ 5h% (reset) · 7d% (reset) │ $cost`\n\n## Themes\n\nSet `THEME=name` in `~/.claude/clickline.conf` or use the configurator (press `t`).\n\n| Theme | Style |\n|---|---|\n| `catppuccin-mocha` | Pastel dark (default) |\n| `catppuccin-frappe` | Pastel mid-tone |\n| `catppuccin-latte` | Pastel light |\n| `dracula` | High contrast dark |\n| `tokyo-night` | Cool blue dark |\n| `gruvbox-dark` | Warm retro dark |\n| `nord` | Arctic blue dark |\n| `solarized-dark` | Classic low-contrast |\n| `one-dark` | Atom-inspired dark |\n| `rose-pine` | Soft elegant dark |\n\nEach theme provides 10 semantic color slots (label, sep, dim, sapphire, lavender, mauve, gold, green, peach, red) mapped to the theme's palette. Unknown theme names fall back to `catppuccin-mocha`.\n\n## Custom items\n\nAdd your own statusline elements — service links, status indicators, or static labels.\n\n**Global items** are stored in `~/.claude/clickline-custom.json` and appear in every repo.\n\n**Per-repo items** are stored in `.clickline` at the repo root and only appear in that repo. Repo items override global items with the same name. You can commit `.clickline` to share service links with your team (add it to `.gitignore` if URLs are sensitive).\n\nUse the `/clickline-custom` skill for interactive setup, or the TUI configurator (`c` for global, `r` for repo item).\n\nBoth files use the same JSON format:\n\n```json\n{\n  \"clock\": {\n    \"cmd\": \"date +%H:%M\",\n    \"color\": \"lavender\",\n    \"label\": \"clock\",\n    \"cache_ttl\": 30\n  }\n}\n```\n\nThen add `custom_clock` to your `LAYOUT` in `clickline.conf`:\n\n```\nLAYOUT=path branch pr custom_clock | context quota cost\n```\n\n### Custom item fields\n\n| Field | Required | Description |\n|---|---|---|\n| `label` | Yes | Static label (used as display text when `cmd` is empty) |\n| `cmd` | No | Shell command whose stdout becomes the displayed text |\n| `color` | No | Palette key: `sapphire` `lavender` `mauve` `gold` `green` `peach` `red` `dim` |\n| `link` | No | OSC-8 URL — supports `{dir}` and `{branch}` placeholders |\n| `cache_ttl` | No | Seconds to cache `cmd` output (default: 30) |\n| `condition` | No | Shell command that must exit 0 for the item to appear |\n\nAdjacent custom items render with dot separators (` · `) instead of pipe separators (` │ `).\n\n### Service link presets\n\nDrop a `.clickline` in any repo to add clickable links to your deployment dashboards:\n\n```json\n{\n  \"backend\": {\n    \"label\": \"backend\",\n    \"color\": \"sapphire\",\n    \"link\": \"https://my-api.up.railway.app\"\n  },\n  \"frontend\": {\n    \"label\": \"frontend\",\n    \"color\": \"green\",\n    \"link\": \"https://my-app.vercel.app\"\n  },\n  \"db\": {\n    \"label\": \"db\",\n    \"color\": \"mauve\",\n    \"link\": \"https://supabase.com/dashboard/project/abc123\"\n  }\n}\n```\n\nCommon URL patterns:\n\n| Service | URL pattern |\n|---|---|\n| Railway | `https://\u003capp\u003e.up.railway.app` |\n| Vercel | `https://\u003capp\u003e.vercel.app` |\n| Netlify | `https://\u003capp\u003e.netlify.app` |\n| Supabase | `https://supabase.com/dashboard/project/\u003cref\u003e` |\n| Neon | `https://console.neon.tech/app/projects/\u003cid\u003e` |\n| Render | `https://dashboard.render.com/web/\u003cid\u003e` |\n| Fly.io | `https://fly.io/apps/\u003capp\u003e` |\n\n### Status indicator examples\n\n**Kubernetes context:**\n```json\n{\n  \"kube\": {\n    \"cmd\": \"kubectl config current-context 2\u003e/dev/null | sed 's/.*_//'\",\n    \"color\": \"sapphire\",\n    \"label\": \"⎈ k8s\",\n    \"condition\": \"command -v kubectl \u003e/dev/null 2\u003e\u00261\"\n  }\n}\n```\n\n**Battery percentage (macOS):**\n```json\n{\n  \"battery\": {\n    \"cmd\": \"pmset -g batt | grep -o '[0-9]*%' | head -1\",\n    \"color\": \"green\",\n    \"label\": \"🔋\",\n    \"cache_ttl\": 60\n  }\n}\n```\n\n**Docker running containers:**\n```json\n{\n  \"docker\": {\n    \"cmd\": \"docker ps -q 2\u003e/dev/null | wc -l | tr -d ' '\",\n    \"color\": \"sapphire\",\n    \"label\": \"🐳 0\",\n    \"condition\": \"docker info \u003e/dev/null 2\u003e\u00261\",\n    \"cache_ttl\": 15\n  }\n}\n```\n\n**Node.js version:**\n```json\n{\n  \"node\": {\n    \"cmd\": \"node -v 2\u003e/dev/null\",\n    \"color\": \"green\",\n    \"label\": \"node\",\n    \"condition\": \"command -v node \u003e/dev/null 2\u003e\u00261\",\n    \"cache_ttl\": 120\n  }\n}\n```\n\n## `/clickline-custom` skill\n\nThe installer copies a Claude Code skill to `~/.claude/skills/clickline-custom/`. Type `/clickline-custom` in Claude Code (or just ask to \"add a statusline item\") for an interactive walkthrough that:\n\n1. Shows your existing custom items (global and per-repo)\n2. Asks what kind of item: **service link**, **status indicator**, or **custom label**\n3. For service links, offers presets for Railway, Vercel, Netlify, Supabase, Neon, Render, and Fly.io\n4. Writes to the correct file (`.clickline` or `~/.claude/clickline-custom.json`)\n5. Adds `custom_\u003cname\u003e` to your LAYOUT automatically\n\n## Config reference\n\n`~/.claude/clickline.conf` (created by installer, or copy from `clickline.conf.default`):\n\n```bash\n# Features (true/false)\nSHOW_BRANCH=true\nSHOW_DIRTY=true          # ·N modified/staged files after branch\nSHOW_AHEAD_BEHIND=false  # ↑N ↓N commits ahead/behind remote\nSHOW_COMMIT=false        # HEAD short hash → GitHub commit\nSHOW_PR=true             # #N or \"New PR\" (requires gh)\nSHOW_CI=false            # ✓ ✗ ⋯ GitHub Actions (requires gh)\nSHOW_MODEL=true\nSHOW_VERSION=false       # Claude Code version\nSHOW_CONTEXT=true\nSHOW_QUOTA=true\nSHOW_COST=true\nLEADING_NEWLINE=false    # blank line before the statusline\n\n# Theme\nTHEME=catppuccin-mocha   # see Themes section for full list\n\n# Options\nBRANCH_MAX_CHARS=25      # truncate long branch names\nPATH_SEGMENTS=2          # show last N path segments\nPATH_LINK_TARGET=finder  # finder | vscode | cursor | none\nPR_CACHE_TTL=60          # seconds between PR cache refreshes\nCI_CACHE_TTL=30          # seconds between CI cache refreshes\nQUOTA_CACHE_TTL=60       # seconds between quota cache refreshes\n```\n\nColors follow the same green → yellow → red progression for context, 5h quota, and 7d quota (\u003c 50% green, \u003c 75% yellow, ≥ 75% red). Cost is ceiling-rounded to whole dollars.\n\n## Quota troubleshooting\n\nIf quota shows `—`, run:\n\n```sh\nbash install.sh --quota\n```\n\nThis walks through all steps (keychain entry, token extraction, API call) and shows a specific fix message for each failure mode. The most common fix is:\n\n```\n/logout\n/login\n```\n\nin Claude Code to refresh OAuth token scopes.\n\n## PR and CI features\n\nPR and CI data is fetched via the `gh` CLI. Install and authenticate:\n\n```sh\n# macOS\nbrew install gh\n# Debian/Ubuntu\nsudo apt install gh\n# Fedora\nsudo dnf install gh\n\ngh auth login\n```\n\nBoth use a stale-while-revalidate cache — they never block the statusline render. Data appears on the next response after the cache warms (typically 1 response delay on first use for a branch).\n\nPR segment is hidden on the default branch (main/master) since PRs don't apply there.\n\n## Acknowledgments\n\nPer-repo `.clickline` items and service link presets were inspired by [@guzus](https://github.com/guzus)'s [PR #1](https://github.com/gradigit/clickline/pull/1).\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgradigit%2Fclickline","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgradigit%2Fclickline","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgradigit%2Fclickline/lists"}