GitHub - howieyoung/cli-times · GitHub
/" data-turbo-transient="true" />
Skip to content
Type / to search
Sign in<br>Sign upAppearance settings
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
howieyoung
cli-times
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>8 Commits<br>8 Commits
.github/workflows
.github/workflows
cmd
cmd
feed-bundles
feed-bundles
harness
harness
internal
internal
packaging
packaging
public
public
site
site
.gitignore
.gitignore
HOSTING.md
HOSTING.md
LICENSE
LICENSE
README.md
README.md
build.sh
build.sh
go.mod
go.mod
go.sum
go.sum
View all files
Repository files navigation
CLI Times
A curated one-line AI-news ticker that lives in your AI coding CLI's wait state.
While Claude Code (and other AI CLIs) sit idle waiting for a response, your status<br>line quietly cycles a hand-curated headline of what's new in AI — models, agent<br>tooling, research, and official product releases developers should know about.
⠋ CT: New open-weight model tops the latest agentic-coding benchmark · official blog
Type cli-times today any time to expand the full brief with source links.
Free. No account, no telemetry, no API tokens consumed.
Safe by construction. The status-line renderer has zero network code and<br>cannot run commands — it reads one local, cryptographically-signed file and<br>prints one line. Bad or expired content shows nothing rather than anything<br>suspicious (fail-closed).
Opt-in and reversible. You paste one line into your own settings; uninstall<br>is three commands.
Experimental project, independent of any vendor. Not affiliated with or endorsed<br>by Anthropic.
Install (macOS / Linux)
Built from source via Homebrew — no unsigned prebuilt binary, no macOS<br>Gatekeeper prompt, and you compile the exact public source. All three steps are<br>required to see the ticker — installing alone won't change your status line,<br>because Claude Code only runs a status-line command you've opted into (step 3).
1. Install (builds the renderer + updater; fetches the first brief):
brew install howieyoung/tap/cli-times
2. Start the auto-updater (one pull-only HTTPS request every ~6h):
brew services start cli-times
3. Turn on the status line — add this to ~/.claude/settings.json (top-level<br>object), then reopen Claude Code. (This step is what actually makes the ticker<br>appear; brew install also prints this reminder.)
"statusLine": { "type": "command", "command": "cli-times", "refreshInterval": 1 }
Done — the ticker cycles in your status line, and the leading braille mark animates<br>once per second while you wait.
See the full brief any time (works without step 3; source links are clickable<br>in modern terminals):
cli-times today
If the status line is blank, the signed feed hasn't landed yet — run<br>cli-times today to check, or wait for the updater's next run.<br>Prefer no animation? Set CLI_TIMES_NO_ANIM=1, or drop refreshInterval.
What you get
Curated, not scraped<br>Headlines are AI-drafted from reputable/official sources, risk-checked, and signed before they ship. One self-written sentence + a link to the original source.
Fresh<br>A new signed brief is published every ~6 hours; your machine pulls it with one HTTPS request on the same cadence.
Source-guaranteed<br>Every ticker line ends with its publication; the expanded brief shows the full URL.
Bilingual-ready<br>Source and display language are user-selectable (English / 繁體中文).
Costs you nothing<br>The status line runs locally and consumes no API tokens. See Privacy & cost.
How it works
Three small Go programs with a deliberately strict split of responsibilities:
cmd/renderer The status-line program. ZERO network, no shell, no writes.<br>Reads one local cache file → verifies the signature → prints one line.<br>cmd/updater The ONLY networked component. Every ~6h: one pull-only HTTPS GET of<br>the signed feed → verify → atomic replace of the local cache. Fail-closed.<br>cmd/sign Offline signing tool. The private key never touches a server or CI*.<br>cmd/curate The editorial pipeline: crawl approved sources → draft → risk-flag.
The feed is an Ed25519-signed bundle . The signature is verified before the<br>JSON is parsed, against a public key pinned into the binary at build time , under<br>a hard size cap. Text is run through a rejection-based sanitizer (Unicode-category<br>filtering + positive allowlist) so nothing can smuggle escape sequences or invisible<br>characters into your terminal. Anything that fails any check renders as blank.
The renderer is intentionally powerless: it never reads your prompts, code, or<br>files, never writes to ~/.claude/settings.json, and never updates...