r/CLI

▲ 50 r/CLI+3 crossposts

[OC] I made a small terminal screensaver that renders Perlin noise flow fields with Braille characters

Hi everyone,

I wanted to share a small Python project I have been working on called halo.

It is a terminal screensaver / visualizer that renders a particle flow field using 3D Perlin noise, Braille cells, and 24-bit ANSI color. The main idea was to see how much visual detail I could get out of a normal terminal without opening a GUI window or relying on an external rendering engine.

The renderer uses Braille characters as a kind of sub-cell pixel grid, so each terminal character can represent a 2x4 block of virtual pixels. Particles move through a vectorized noise field, leave trails behind, and the output is diffed frame-to-frame so it only writes changed cells back to the terminal.

It includes a few color presets such as neon, sunset, ocean, forest, and fire, and it should work in modern true-color terminals like Windows Terminal, WezTerm, Alacritty, kitty, Ghostty, and iTerm2.

Install from GitHub:

pip install git+https://github.com/programmersd21/halo.git

Run it with:

halo

Example:

halo -c fire -p 600 -s 2.0

This is not meant to be a serious productivity tool. It is just a small terminal art experiment that I had fun building, and I tried to keep it lightweight and readable.

Repo: https://github.com/programmersd21/halo

I would appreciate any feedback, especially from people who enjoy terminal graphics, creative coding, or small CLI projects. Consider checking out the repo and leaving a star!

u/Klutzy_Bird_7802 — 1 day ago
▲ 114 r/CLI+2 crossposts

I made a better zsh autosuggestion, it predicts your next command, not just completes the current one

▲ 18 r/CLI

Made a modern Linux terminal dashboard in Python

Been working on a modern terminal hardware monitor/dashboard for Linux called Vortex.

Main goal:

make a TUI that feels cleaner and more modern than most existing terminal monitors.

Current features:

* CPU/GPU/RAM monitoring

* process tracking

* network + disk stats

* live updating dashboard UI

Built entirely in Python for Linux.

Would love feedback from Linux/TUI users.

https://github.com/saygo788-pixel/vortex

u/TalkSecret5479 — 1 day ago
▲ 379 r/CLI+3 crossposts

Back to the roots: 'Tetro TUI' is very customizable but runs purely in the terminal

As shrimple as that (apart from a gazillion terminal limitations and implementing NES style using text???) @ https://github.com/Strophox/tetro-tui :-)

u/Strophox — 2 days ago
▲ 56 r/CLI+3 crossposts

Most of my workflow already lives in Neovim — code, prose, notes, scratchpads. The piece that always lagged was querying the notes. Plenty of tools let me grep them; almost none let me ask things like "all the drafts under tasks/q2 that link to people/alice" without leaving the buffer.

Turns out you can. IWE is a Rust binary (LSP server + CLI) that treats a directory of .md files as a queryable graph. Install once, use it from the editor over LSP and from the shell over :!.

The query language is small and reads like Mongo's:

iwe find --filter 'status: draft, priority: {$gte: 8}'

iwe find --filter 'author.email: {$exists: true}'

Frontmatter is the schema. Markdown links are the relationships — and there are two kinds, which the engine actually distinguishes:

  • An inline link in body text is a reference: "see also."
  • A markdown link alone on its own line is an inclusion link: containment. The linked document becomes a structural child of this one.

Each gets its own pair of operators:

iwe find --references people/alice # docs that link to Alice inline
iwe find --included-by tasks/alpha:0 # everything under alpha's tree (unbounded)
iwe find --included-by tasks/alpha:0 --references people/dmytro --filter 'status: draft'

That last line: drafts under the tasks/alpha subtree that also mention people/dmytro inline. Three relationships, three flags.

The same predicates drive iwe count, iwe update, iwe delete. Bulk-set frontmatter from the shell:

iwe update --filter 'status: draft, reviewed: true' \
--set status=published \
--set published_at=2026-05-02

update and delete require an explicit --filter (no accidental whole-corpus rewrites). --dry-run previews.

From inside Neovim, this composes two ways.

The same iwe binary is also a markdown LSP server, so the editing side feels like working in code:

  • gd — jump to linked notes
  • gr — find references / backlinks
  • K — hover preview of a linked note without opening it
  • Code actions for extract section to a new file, inline a referenced note, rename
  • Auto-complete for link targets as you type
  • Inlay hints showing parent context and link counts

There's a dedicated plugin — iwe.nvim — that wires the LSP up and adds Telescope integration with hierarchical path search (notes show as Journal ⇒ 2026 ⇒ Week 18 ⇒ Mon notes). Lazy / packer / vim-plug all work.

For querying, you don't need a special integration — the CLI is enough:

  • Output is plain text — pipe to jq, fzf, telescope, whatever.

Same install handles both: cargo install iwe and you have the LSP server + the CLI. The LSP runs against any folder of .md files; the CLI queries the same folder.

Side note: this also turns out to be a decent shape for AI agents. They use the same CLI you do, see the same files, and git log is your audit trail for whatever they touch.

Repo: https://github.com/iwe-org/iwe · Plugin: https://github.com/iwe-org/iwe.nvim

Curious what the heavy notes-in-Neovim crowd thinks, especially on the inclusion-vs-reference link split.

u/gimalay — 1 day ago
▲ 25 r/CLI

psleep — a drop-in replacement for `sleep` with a progress bar

Tired of running `sleep 30` and staring at a blank terminal? I built psleep — it works exactly like sleep but shows you how much time is left.

  • Drop-in compatible: psleep 30, psleep 1m30s, psleep 2h5m
  • Multiple styles (bar, blocks, dots, emoji, spinner)
  • Native terminal progress (OSC 9;4) for supported terminals, progress shows in your tab bar
# Homebrew (macOS)
brew install Yesh-02/tap/psleep

# From crates.io
cargo install psleep

GitHub: https://github.com/Yesh-02/psleep

Note: This software's code is partially AI-generated.

u/Yesh_002 — 1 day ago
▲ 27 r/CLI+14 crossposts

Ask questions across your Markdown notes using a fully local Graph RAG engine. Built for Obsidian vaults, works with any folder of Markdown files. Extracts entity-relation triples from wikilinks & YAML frontmatter, retrieves answers via hybrid search (vector + BM25 + temporal). Multilingual. No cloud. Runs on Ollama.

https://github.com/benmaster82/Kwipu

u/WritHerAI — 2 days ago
▲ 33 r/CLI+3 crossposts

repo-check: a simple terminal dashboard to monitor git repositories

Hello!

I made a small CLI tool called check-repo to quickly scan multiple Git repositories and see which ones are clean, dirty, missing, or have pending updates.

It can also track different repo lists per environment, for example Linux, macOS, or WSL, which is useful if you use the same config across multiple machines.

I mostly use it after topgrade with this alias:

alias update='topgrade && echo && check'

The demo also shows the interactive mode (--interactive or -i), which lets you handle simple repo tasks from the terminal.

You can find more info on the GitHub page:
https://github.com/Cartoone9/check-repo

Feedback is welcome. Have a good day.

u/Leather_Coyote_5483 — 1 day ago
▲ 47 r/CLI+1 crossposts

ghgrab v2.0 is out - now supports GitHub, GitLab, Codeberg, Gitea, and Forgejo

Hey everyone,

A while back I posted about ghgrab, a small CLI/TUI tool to grab only the files or folders you need from a repo without cloning the whole thing.

Just released v2.0.

New stuff:

  • works with GitHub, GitLab, Codeberg, Gitea, and Forgejo
  • GitHub repo search directly inside the TUI
  • file preview support
  • release asset downloads
  • agentic mode for scripts/AI agents to fetch only needed files

Install:

cargo install ghgrab

npm install -g u/ghgrab/ghgrab

pipx install ghgrab

Repo: https://github.com/abhixdd/ghgrab

Would love feedback or feature ideas.

u/hmm-ok-sure — 2 days ago
▲ 3 r/CLI+1 crossposts

Dirplot 0.5.0 – Local and remote directory treemaps, as snapshots and animations

Dirplot creates clean, squarified treemaps where rectangle area is proportional to file/folder size, with smart per-extension coloring. This started as a vibe-coding experiment to replicate the functionality of tools like GrandPerspective, but then evolved to work far beyond a local disk.

Key Features

  • Supports local dirs, archives (zip/tar/7z/...), SSH, AWS S3, GitHub repos (public + private), Docker containers, Kubernetes pods, and Google Drive.
  • Inline terminal display (iTerm2, Kitty, Ghostty, WezTerm, Warp), no separate image window needed, but can also open the system's image viewer.
  • Git & Mercurial history animation → MP4 / APNG / MOV timelapses.
  • Live watch mode + event recording + replay.
  • diff between any two sources (including two git tags/commits) with color-coded added/removed/changed borders.
  • dirplot metrics for detailed stats (top extensions, largest files, JSON output).
  • Outputs: PNG, SVG (slightly interactive), APNG, MP4, MOV. Custom canvas size and --log-scale supported.

Quick Start

Bash

# Recommended install
uv tool install dirplot

# Basic usage
dirplot map .                     # current directory → opens in viewer
dirplot map . --inline            # beautiful inline in terminal
dirplot map github://pallets/flask
dirplot git . -o history.mp4      # animate your repo's growth
dirplot diff .                    # see uncommitted changes as treemap

Usecases

  • Understand large codebases or monorepos at a glance.
  • Visualize cloud storage or container images without downloading everything.
  • Create compelling git history growth animations.
  • Compare directory versions or releses.
  • Monitor live filesystem changes.

Links

Would love to get feedback and ideas for new use cases!

reddit.com
u/Deepluk — 2 days ago
▲ 40 r/CLI

I built driftFM, a retro synthwave TUI internet radio player in Rust + Ratatui

Hey folks,

Several months ago, I rediscovered the world of CLI and TUI apps, and I was once again amazed by how useful, simple, and fast these tools can be. I fell in love with them pretty quickly.

Since then, I’ve vibe coded a bunch of small tools and apps, mostly very specific CLIs and TUIs that I now use every day in my workflow. I really enjoy taking simple ideas and turning them into something practical.

Today, for the first time, I decided to publicly release one of those tools so other people can use it too.

Like many of you, I spend a lot of time at my computer every day. While working, I like to listen to different kinds of music. But I realized that constantly finding new music is not always easy. I’m not always looking for a specific artist, album, or playlist. Sometimes I just want a certain mood, genre, or atmosphere.

That’s where internet radio turned out to be a great fit for me.

After using web-based internet radio players for a while, I started feeling like I wanted something faster, simpler, keyboard-friendly, and more fun to use. So, naturally, I vibe coded my own.

It’s called driftFM. It’s a terminal-based internet radio player written in Rust using Ratatui, with a retro synthwave aesthetic.

GitHub: https://github.com/milgaj84/driftFM

I use it every day, and I hope some of you will find it useful too. If you try it and have suggestions, ideas, or find any bugs, please feel free to open an issue on GitHub.

Thanks for checking it out!

u/WriterOfLives — 2 days ago
▲ 108 r/CLI+2 crossposts

EVIL GOOGLE?

Google has officially announced that #Gemini CLI is being retired in favor of #Antigravity CLI, their new terminal experience.

On June 18, 2026, Gemini CLI and Gemini Code Assist IDE extensions will stop serving requests for Google AI Pro, Google AI Ultra, and free individual users.

The funny part?

Less than 11 months ago, Google published this headline:

#Gemini CLI: your #open-source AI agent”

Free. Open source. Built for developers.

Fast forward to today - sunset in less than 30 days, no more new model access, no more real future, and people are already seeing errors like:

| Model "gemini-3.5-flash" was not found or is invalid.

| /model to switch models.

Classic Google.

They sell you the open-source dream, get their fanboi hype, then move everyone to the new shiny closed experience.

The new Antigravity CLI is now the path forward if you want access Google AI quota through Google AI plans. Otherwise, you can still go the pay-per-use API key route.

Never trust Google’s “Do no evil” era too much.

Meanwhile, OpenAI Codex was open source from the beginning - just like the name suggested.

OpenAI gave us CLIP, Whisper, GPT-OSS, and Codex-rs.

Say what you want about OpenAI, but these are the tools that actually pushed the AI developer ecosystem forward.

Also, Claude Code was open source for a while too XD

Hope you learn something new today.

u/usamanoman — 2 days ago
▲ 21 r/CLI

Amptui : A plexamp like tui application

A terminal UI Plex client focused exclusively on music — browse your library, queue tracks, and play them, all from the keyboard.

Hi everyone,

I'm building amptui for fun. I started because i'm on a weird asahi arch distribution and couldn't run the plexamp app, and continuing because I love TUI aesthetic and vim like controls.

It's written in Go on top of Bubble Tea + Lipgloss, with mpv driving playback. There's a cache system for your library to load fast (allows fuzzy search feature also) and images can render if your terminal allows it (Unicode block fallback if not).

You can learn more on the README there : Amptui Github

Feel free to use it, fork it, contribute, have fun with it !

u/Itchy-Ad-6973 — 3 days ago
▲ 81 r/CLI+2 crossposts

Typio: Make Your Terminal Type Like a Human

Typio is a lightweight Python library that prints text to the terminal as if it were being typed by a human. It supports multiple typing modes (character, word, line, sentence, typewriter, and adaptive), configurable delays and jitter for natural variation, and seamless integration with existing code via a simple function or a decorator. Typio is designed to be minimal, extensible, and safe, making it ideal for demos, CLIs, tutorials, and storytelling in the terminal.

Repo: https://github.com/sepandhaghighi/typio

u/sepandhaghighi — 3 days ago
▲ 14 r/CLI+1 crossposts

I got tired of Claude Code silently dying at rate limits during mid task, so I built something

I got tired of Claude Code silently hitting rate limits, so I decided to build something to address the issue.

Imagine you’re 40 minutes into a refactor. Claude is running tools and making progress, then suddenly, everything stops. The session has reached its rate limit without any warning—no alert saying you’re at 95%, just a complete halt. The usage bars are visible in the UI, but the model itself remains unaware of them.

I discovered that Anthropic has a usage API, and Claude Code already possesses hooks to make it work. This led me to create agent-baton, which reads the usage API and installs hooks to make Claude aware of its limits.

Here are the three hooks you can initiate with one command (baton init):

  1. SessionStart: Fetches usage data and injects it so Claude knows from the first message how much has been used.
  2. UserPromptSubmit: Performs a time-to-live (TTL) aware check that avoids overwhelming the API. It uses smart caching—checking every 15 minutes when usage is low and once a minute when it's nearing the limit.
  3. PreToolUse: This is the crucial one; it checks usage mid-task to prevent the scenario where you “started at 93% and ran out of capacity mid-execution,” catching the problem within 1-2 tool calls.

When the warning threshold is reached, it prompts an interactive question using Claude Code's built-in AskUserQuestion tool:

"Claude 5-hour usage is at 91% — you're in the warning zone."

Options include:

  • Continue this task
  • Write a handoff document
  • Switch to lightweight mode

It also handles full agent handoffs by writing a structured markdown handoff and passing work to Cursor, Codex, or Gemini.

You can install it with the following command:

npm install -g u/codeprakhar25/agent-baton && baton init

For more details, visit the GitHub repository.

u/No-Childhood-2502 — 3 days ago
▲ 15 r/CLI+1 crossposts

lazydiff — a terminal-native diff reviewer with semantic diffs, persistent notes, and 60fps rendering

Most code review tools are either a browser tab that pulls you out of your terminal or a pager that dumps colored text and forgets everything when you close it. I wanted something that stays in the terminal, remembers where I was, and actually understands what changed.

lazydiff is a keyboard-driven diff reviewer built in Rust with ratatui. Some highlights:

- Renders 10k+ line diffs at 60fps with sub-2ms frame times, virtualized scrolling, only viewport rows hit the buffer
- Tree-sitter syntax highlighting that reconstructs both sides of the diff independently so deleted code highlights correctly in its original language
- Inline word-level diffs using LCS on tokenized line pairs, highlights the exact tokens that changed, not the whole line
- Split and unified view, fuzzy file navigation powered by nucleo, vim keybindings
- Semantic diffs powered by https://github.com/Ataraxy-Labs/sem, parses changes into entity graphs of functions, classes, and methods instead of just showing lines
- Threaded comments anchored to exact lines, leave notes and instructions for your coding agents, they read and reply via CLI
- Everything persists to SQLite locally, close the terminal, come back tomorrow, pick up where you left off

Built for the workflow where you're already in the terminal working with coding agents and don't want to context-switch to a browser to review what they wrote.

User Friendly License: Dual-licensed MIT/Apache-2.0.

Open Source Repo: https://github.com/Ataraxy-Labs/lazydiff

u/Wise_Reflection_8340 — 3 days ago
▲ 23 r/CLI+1 crossposts

I built a khinsider Explorer & Bulk Downloader

I think I did something beautiful.

Spent my last few days building and refining a TUI app to browse and download the whole khinsider download catalouge: khi-explorer

You can easily search for OSTs, navigate albums, download individual tracks and YES even whole albums at once!

I think that's the most outstanding feature a lot of people want - just press D-key on an entry and you will see a progress bar showing you when it's finished.

On first launch the app will create .khi_explorer.yaml in your home directory. There you can set:

  • Download path (default: [HOME_DIRECTORY]/khi_explorer)
  • Default format (you can switch this anytime inside the app by pressing TAB-key)
  • Player for live playback (you must have mpv, ffplay or vlc installed but most people already have)

It's built in Go using the Bubbletea library, so it's easy to cross-compile and you can install it on Windows, Linux or macOS using the linked install scripts on GitHub or by just downloading the binary directly from the releases page (Linux binary is heavily compressed using upx; macOS sadly not supported; Windows Defender says no-no very bad)

Happy exploring! 🙂

https://github.com/madLinux7/khi-explorer

u/Linuxxsxx — 3 days ago
▲ 81 r/CLI+3 crossposts

tui youtube player for music with mcp and can sync channels to sqlite

Hi! it's my first project with bubble tea and lipgloss. also uses sqlite, mpv, and yt-dlp.
It plays music you curate with any agent via mcp connectors. the agent can manage and create playlist, also play and pause any songs for you. you can favorite a song or download to ~/music/tuitube/ and play it offline. there are 14 themes and 2 visualizers and the db i made ships with 8000+ songs. there are no ads as it uses yt-dlp.
there are probably other similar tui app but it's got the features that I mainly use and very easy nav imo + agent native tooling.

https://github.com/gitcoder89431/tuitube

open source with mit license, 2 releases cause i only have a linux and mac os machine. I can publish on homebrew or aur if anyone needs it. thank you for your time. 😆

u/Thin_Beat_9072 — 4 days ago
▲ 13 r/CLI+1 crossposts

Lsport - Command-line utility for inspecting and managing TCP ports

Hey everyone,

I just published my first open source project on PyPI and would love some honest feedback before I keep iterating.

The problem

Two pain points I kept hitting:

  1. No clean way to see what's running where. lsof -i -P -n | grep LISTEN works, but the output is noisy and columnar — you have to mentally filter it every time. There's no single command that just tells you "here are the ports currently in use, by which process."
  2. Killing a port-holder is a multi-step dance:

lsof -i :3000 to find the PID, then kill -9 <PID> and hope it's the right one. Two commands, copy-paste a PID, parse columns. Across a workday it adds up.

What lsport does

pipx install lsport

Three subcommands:

  • lsport list — all TCP ports currently in use, rendered as a clean table (PID, port, process, user). One command, one glance.
  • lsport kill 3000 — kills whatever owns that port, with a confirmation prompt.
  • lsport interactive — a TUI to browse and kill from a table view.

Works on macOS and Linux. Windows isn't supported yet — I don't have a reliable way to test it.

Tech

Python 3.9+, single-module. psutil for cross-platform socket/process enumeration, rich for table rendering and the TUI, tests with pytest, lint/format with ruff. Published via PyPI Trusted Publishing (OIDC) — no API tokens stored anywhere.

Why not just fuser -k 3000/tcp or a shell alias?

Fair question. fuser is Linux-only and the UX is rough. lsof | grep | awk | xargs kill works but is fragile, and it still doesn't solve the "show me everything at a glance" case. I wanted something opinionated that handles the 90% case and reads naturally.

I'm also aware tools like kill-port (npm) exist — lsport is in that family but Python-native and adds the listing + TUI layer.

What I'd actually love feedback on

  • Code quality and project structure — this is my first OSS project, so blind spots are guaranteed
  • The kill confirmation flow — too noisy, or about right?
  • Windows support — happy to mentor anyone who wants to take a stab
  • Subcommand naming and UX

Repo: https://github.com/0xBroom/lsport PyPI: https://pypi.org/project/lsport/

MIT licensed. Issues and PRs are open. Tear it apart — I'd rather hear it now than later.

u/JohnHopeman — 3 days ago