A terminal-based package management dashboard for Arch Linux
Browse, inspect, AI-analyze, and batch-uninstall packages across multiple package managers — all from one beautiful TUI.
Your system accumulates packages over time. Some you installed months ago and forgot about. Some are 500 MB behemoths you used once. Some you're not even sure what they do anymore.
Orpheus gives you clarity. It pulls every explicitly installed package from Pacman, Flatpak, and npm into a single dashboard — then lets an AI tell you what's safe to remove.
A clean, vim-navigable interface with a sidebar for switching managers, a package list with virtual scrolling, and a detail panel with full package info and AI analysis.
| Manager | What It Lists | Uninstall Strategy |
|---|---|---|
| Pacman | All explicitly installed packages (pacman -Qi) |
pacman -Rns --noconfirm (recursive, removes configs) |
| Flatpak | All installed Flatpak applications | Removes app data + cleans unused runtimes |
| npm | Global npm packages with real disk sizes | npm uninstall -g |
and many more to come!
Press a on any package and Orpheus tells the full context about your system:
- What the package does on your machine
- Why you probably installed it (based on your other packages)
- What happens if you remove it
- How to launch it (provides the terminal command)
The AI sees your entire list of explicit packages, so it can reason about relationships — e.g., knowing you have
neovimhelps it understand whylua51exists.
Spaceto toggle individual packagesvto enter visual mode — select ranges by moving the cursor- Batch-remove everything in one
sudocall
/to fuzzy-search by name or descriptionsto cycle sort: Name → Size → Date- Scroll indicator shows your position in the list
AI analysis results are cached to ~/.cache/orpheus/analysis.json (formatted with MarshalIndent for easy ripgrep searching). Analyze once, read forever.
Orpheus is prepackaged with Gruvbox dark so if you want more themes feel free to put an issue or a PR
╭──────────╮╭─────────────────────────╮╭──────────────────────╮
│ Orpheus ││ Packages (142) by Size ││ neovim │
│ ││─────────────────────────││ 0.9.5 │
│ Packages ││ ● neovim 28.4MiB ││─────────────────────-│
│ > Pacman││ ● firefox 412.0MiB ││ Desc: Vim-fork fo... │
│ Flatpak│ ✓ htop 1.4MiB ││ Size: 28.4 MiB │
│ Node ││ ● gcc 119.0MiB ││ Date: Jan 15, 2026 │
│ ││ ● ripgrep 8.1MiB ││ Reason: Explicit │
│ ││ ● curl 3.2MiB ││ │
│ ││ ││ AI Analysis: │
│ ││ ││ Neovim is your pri... │
│ ││ ││ │
│ ││ 3/142 2% ││ Verdict: [KEEP] │
│ ││ ││ (Command: nvim) │
╰──────────╯╰─────────────────────────╯╰──────────────────────╯
v/Spc select j/k move l/Enter open s sort / search q quit
Orpheus uses vim-style navigation throughout. The status bar always shows available keys for the current context.
| Key | Action |
|---|---|
j / k |
Move down / up |
h / l |
Focus left / right panel |
Ctrl+D / Ctrl+U |
Half-page down / up |
G |
Jump to bottom |
gg |
Jump to top |
Enter / l |
Open detail / enter panel |
Esc / h |
Back / exit mode |
| Key | Action |
|---|---|
Space |
Toggle package selection |
v |
Visual mode — select a range |
| Key | Action |
|---|---|
a |
AI analyze selected package |
x |
Remove selected package(s) |
/ |
Search packages |
s |
Cycle sort mode |
r |
Reload package list |
q |
Quit |
- Go 1.26+
git clone https://github.com/your-username/orpheus.git
cd orpheus
go build -o orpheus .# Set up your Groq API key for AI analysis
echo "GROQ_API_KEY=your_key_here" > .env
# Launch
./orpheusTip: Place the binary anywhere — Orpheus reads
.envrelative to the executable's location, not your working directory.
- Go to console.groq.com
- Create a free account
- Generate an API key
- Add it to your
.envfile
orpheus/
├── main.go # Entry point — .env loader, Bubble Tea bootstrap
│
└── internal/
├── ai/
│ └── analyzer.go # Groq API client — prompts, retry logic, response parsing
│
├── cache/
│ └── cache.go # Thread-safe JSON file cache with RWMutex
│
├── pm/ # Package Manager abstraction
│ ├── package.go # Package struct + Manager interface
│ ├── pacman.go # pacman -Qi parser (state machine)
│ ├── flatpak.go # flatpak list parser + cleanup logic
│ └── npm.go # Inline Node.js script for global packages
│
└── tui/ # Terminal UI
├── model.go # Model struct, Init(), tea commands
├── msgs.go # Bubble Tea message types
├── update.go # Update() — all keybindings and logic
├── view.go # View() — three-panel rendering
└── styles.go # Gruvbox Dark color palette + Lip Gloss styles
- Explicit packages only — Dependencies are hidden. You only see what you installed.
- Context-aware AI — The full list of your explicit packages is sent to the AI, so it can infer why something exists.
- Single-command batch removal —
pacman -Rns pkg1 pkg2 pkg3in onesudocall, not N separate calls. - Flatpak cleanup — Uninstalling a Flatpak also deletes its data and removes orphaned runtimes automatically.
- No pip — Modern Arch uses PEP 668 externally-managed environments, making system-wide pip unusable.
- Pacman provider
- npm provider
- Flatpak provider (with
--delete-data+--unusedcleanup) - AI analysis with Groq/Llama 3.3 70B
- AI launch commands (
Command: ...) - Ripgrep-ready cache formatting
- 🔨 Ripgrep AI cache search (
?keybind) - Search & install via
yay(background package cacher + instant search) - Global cross-manager search
- Package update commands
Contributions are welcome! The codebase is intentionally modular — adding a new package manager is as simple as implementing the Manager interface:
type Manager interface {
Name() string
ListAll() ([]Package, error)
GetPackage(name string) (*Package, error)
UninstallCmd(names []string) []string
}MIT — do whatever you want with it.
Built with Bubble Tea 🧋 and Lip Gloss 💄
Orpheus — I should not be trusted with packages.
