{"id":51340509,"url":"https://github.com/bmmmm/git-times-live","last_synced_at":"2026-07-02T07:03:03.530Z","repository":{"id":368736510,"uuid":"1277485634","full_name":"bmmmm/git-times-live","owner":"bmmmm","description":"Standalone live broadcast TV channel for your git activity — generated from git-times.","archived":false,"fork":false,"pushed_at":"2026-07-02T00:11:11.000Z","size":548,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T02:15:02.842Z","etag":null,"topics":["bash","broadcast","claude-code","cli","dashboard","developer-tools","git","git-log","jq","live","monitoring","news-ticker","shell","terminal","tui"],"latest_commit_sha":null,"homepage":"https://bmmmm.github.io/git-times-live/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bmmmm.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-06-23T00:02:19.000Z","updated_at":"2026-07-02T00:11:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bmmmm/git-times-live","commit_stats":null,"previous_names":["bmmmm/git-times-live"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bmmmm/git-times-live","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmmm%2Fgit-times-live","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmmm%2Fgit-times-live/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmmm%2Fgit-times-live/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmmm%2Fgit-times-live/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bmmmm","download_url":"https://codeload.github.com/bmmmm/git-times-live/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmmmm%2Fgit-times-live/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35036554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bash","broadcast","claude-code","cli","dashboard","developer-tools","git","git-log","jq","live","monitoring","news-ticker","shell","terminal","tui"],"created_at":"2026-07-02T07:03:00.189Z","updated_at":"2026-07-02T07:03:03.523Z","avatar_url":"https://github.com/bmmmm.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# git-times-live\n\n![THE GIT TIMES · LIVE](docs/banner.png)\n\nA standalone **live broadcast TV channel** for your git activity. Leave it\nrunning and it updates itself: a tick-driven, full-screen \"TV news\" view that\npolls your repos for new commits (and, with a forge configured, PR/issue\nevents) and shows them as a breaking-news feed under a live clock, with a\nlower-third marquee ticker.\n\nIt polls git directly — **no collect, no cache write** — and stays open until\nyou quit.\n\n**See it move:** \u003chttps://bmmmm.github.io/git-times-live\u003e — the channel page,\nrendered live in your browser.\n\n![the channel: masthead with live clock, ON AIR banner, breaking-news feed with\nthe A.I. desk and churn columns, lower-third marquee](docs/screenshot-channel.png)\n\n## Install\n\nNo build step, no runtime dependencies beyond **bash 4+** and **git** (plus\n**jq** if you enable forge events). Just run it from the project directory:\n\n```bash\n./git-times-live\n```\n\nOptionally put it on your `PATH` with a symlink (the entry is symlink-safe and\nstill finds its `lib/`):\n\n```bash\nln -s \"$PWD/git-times-live\" ~/.local/bin/git-times-live\n```\n\n## Usage\n\n```bash\n./git-times-live                       # both local commits and forge events\n./git-times-live --scope local         # local commits only (no network)\n./git-times-live --mine                # only your own commits\n./git-times-live --theme matrix        # pick an accent palette\n./git-times-live --help                # full option + tunable reference\n```\n\n### Keys\n\n| Key | Action                         |\n|-----|--------------------------------|\n| `q` | quit                           |\n| `r` | refresh now                    |\n| `p` | pause / resume                 |\n| `m` | toggle the lower-third ticker  |\n| `t` | toggle the A.I. desk (inline tokens) |\n| `c` | toggle the churn column (per-commit Δ) |\n\nThe `t` and `c` toggles are **remembered across runs**: their on/off state is saved\nunder `GIT_TIMES_HOME` (default `~/.cache/git-times`) and resumed on the next launch,\nso the channel comes back the way you left it. An explicit `GIT_TIMES_LIVE_TOKENS` or\n`GIT_TIMES_LIVE_CHURN` at launch still wins as a one-off override.\n\n## Configuration\n\nRepo discovery and behaviour are env-driven:\n\n| Variable                          | Meaning                                            | Default  |\n|-----------------------------------|----------------------------------------------------|----------|\n| `GIT_TIMES_ROOTS`                 | space-separated roots to scan (plus the cwd repo)  | common code dirs |\n| `GIT_TIMES_THEME`                 | accent palette                                     | `neon`   |\n| `GIT_TIMES_HIGHLIGHT`             | accent repo headings + type dots (`on`/`off`)      | `on`     |\n| `GIT_TIMES_LIVE_INTERVAL`         | local commit poll cadence (s)                      | `10`     |\n| `GIT_TIMES_LIVE_TICK`             | display tick / marquee step (s)                    | `0.25`   |\n| `GIT_TIMES_LIVE_LOOKBACK`         | startup backfill window (s)                        | `86400`  |\n| `GIT_TIMES_LIVE_FLASH`            | BREAKING banner flash duration (s)                 | `6`      |\n| `GIT_TIMES_LIVE_FEED_MAX`         | max items kept on the wire                         | `60`     |\n| `GIT_TIMES_LIVE_REMOTE_INTERVAL`  | remote (PR/issue) poll cadence (s)                 | `90`     |\n| `GIT_TIMES_LIVE_TICKER`           | start with the ticker running (`on`/`off`)         | `off`    |\n| `GIT_TIMES_LIVE_TOKENS`           | A.I. desk: inline per-repo assistant tokens (`on`/`off`) | `off` |\n| `GIT_TIMES_LIVE_TOKENS_INTERVAL`  | A.I. desk poll cadence (s)                         | `60`     |\n| `GIT_TIMES_LIVE_CHURN`            | churn column: inline per-commit Δ lines touched (`on`/`off`) | `off` |\n\nThe `--scope`, `--theme`, `--highlight`, `--width`, `--no-color`, `--authors`,\nand `--mine` flags override the matching env at launch.\n\n### A.I. desk (inline assistant tokens)\n\nAn **optional, off-by-default** module: every feed line gains a token column\nright of the repo name — that repo's total assistant tokens over the window,\nread from your **Claude Code transcripts** (default `~/.claude/projects`,\noverride with `GIT_TIMES_USAGE_CLAUDE_DIR`). The figure is the per-repo window\ntotal, so every line of a repo carries the same count. It is the only part of\nthe channel that uses **jq** — and only while the module is on; off, the channel\nstays pure git.\n\nRight of the total, a green **`+growth`** tag shows how much that repo has gained\nsince you enabled the desk — the live delta against a baseline frozen at the first\ncollect after `t` (or launch). So you watch each project consume tokens in real\ntime. It is blank when the repo has not grown since you started watching.\n\nToggle it live with `t`, or start it on with `GIT_TIMES_LIVE_TOKENS=on`. The\nusage collect runs asynchronously on its own cadence so the clock never stalls.\nFail-soft: no jq or no transcripts → the columns just stay blank.\n\n### Churn column\n\nA second **optional, off-by-default** module, independent of the A.I. desk and\ntoggled on its own with **`c`** (or `GIT_TIMES_LIVE_CHURN=on`): a cyan **`Δchurn`**\nshowing that commit's own churn — the lines it touched (additions + deletions),\ncompact (`Δ262`, `Δ48k`, `Δ1M`). Unlike the per-repo token and growth columns\n(identical on every line of a repo), churn is **per commit** and exact, measured\nstraight from git (`git show --numstat`, **no jq**), captured once when the commit\nfirst reaches the wire. Blank on PR/issue rows and on empty or binary-only commits.\n\nThe desk and churn columns are fully independent — run churn alone (pure git, no\njq), the token desk alone, both, or neither. Each toggle only widens or narrows the\nheadline column; the feed never shifts rows. Whenever either column is showing, a\ncolor-matched header row labels the active columns (yellow `TOKENS`, green\n`+GROWTH`, cyan `CHURN`) so the figures decode at a glance; with both off there is no\nheader row.\n\n### Forge events (PR / issue)\n\nTo ride PR/issue events into the feed (Forgejo / GitHub / GitLab), copy\n`.env.example` to `.env` and fill in your host, owner, and a token. The example\nships **placeholders only** — never commit a real token or host. `.env` is\ngitignored.\n\n```bash\ncp .env.example .env\n$EDITOR .env\n```\n\nRun with `--scope local` to skip the forge poll entirely (no network).\n\n## Provenance\n\nThis project is **GENERATED** from the `git-times` source tree by\n`scripts/build-live-dist.sh`. The lib files\nand the entry are copied verbatim from the tested git-times source — git-times\nremains the single source of truth. Do not hand-edit; regenerate to update. The\nexact source commit is recorded in `MANIFEST.generated`.\n\n## License\n\nGPL-3.0 — see `LICENSE`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmmmm%2Fgit-times-live","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbmmmm%2Fgit-times-live","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmmmm%2Fgit-times-live/lists"}