- Rust 87.3%
- HTML 6%
- CSS 3.3%
- Shell 2.5%
- Nix 0.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
The `:` prompt only ever ran text through the Cli grammar, so vim muscle memory (`:q`) fell through to a "unrecognized subcommand" error instead of quitting — there's no real `kanri q` CLI action to back it, since quitting only makes sense from the TUI. Short-circuit both spellings in run_tui_command before Cli::try_parse_from. |
||
| docs | ||
| packaging | ||
| src | ||
| website | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| README.md | ||
| shell.nix | ||
kanri (管理)
A vim-modal system powertool for Linux — the functionality of
nmcli/nmtui, btop, du(f)/df, dmidecode, free/top/vmstat,
plus real WireGuard, Tailscale, and packet capture, in one TUI and
one scriptable CLI. Not two separate tools sharing a name — one shared
action layer behind both: every keybind and every : command in the TUI
runs through the exact same code as its CLI subcommand.
kanri # TUI
kanri proc list # CLI, same underlying action
kanri disk --json # machine-readable
What's in it
- Overview — CPU/memory/network/disk at a glance, real sparklines and gauges
- Network — devices & connections (NetworkManager), live diagnostics, socket list, WireGuard status + up/down, Tailscale status + up/down/exit-node, per-process bandwidth, subnet scan, live packet capture (Wireshark-style dissection)
- Process — sortable/filterable table, per-core CPU strip, kill/renice
- Memory, Disk (grouped by physical drive, real capacities, collapsible), Hardware (host/CPU/kernel/sensors)
100% vim-modal (hjkl, gg/G, : command line, / live filtering —
contextual to whatever list is on screen), fully remappable, live theme
hot-reload, zero config required.
Install
See docs/install.md — Arch, Debian/Ubuntu, NixOS, or build from source.
Docs
- docs/keybindings.md — every keybind, what's contextual and why
- docs/config.md — full
config.tomlreference - docs/cli.md — every CLI subcommand
- docs/wireguard.md — one-time sudo setup for WireGuard status/control
- docs/capture.md — one-time setup for packet capture
Design notes
- One action layer.
Action(also aclap::Subcommand) is dispatched identically whether it came from a shell argv or the TUI's:line parsed with the same grammar. There is exactly one implementation per action. - Never grants its own privilege. WireGuard control and packet capture both need root/capabilities kanri doesn't have by default and won't silently acquire — see the docs above for the one-time setup, scoped as narrowly as you want it.
--jsonon everything that has a CLI form — same data as the human-readable text, nothing summarized differently between the two.
Status
Actively developed, pre-1.0. Source lives on this project's own self-hosted Forgejo instance, not GitHub.
License
Apache License 2.0 with the Commons Clause condition. In plain terms: free to use, modify, and redistribute for any purpose — including inside a company, privately — except selling it (the software itself, or a derivative, as a product or paid service). Any modified file must be marked as changed, so credit follows even a small edit through to anyone who receives it.
This isn't an OSI-approved "open source" license — the no-selling condition is a real restriction on top of Apache-2.0, not compatible with the open source definition's "no restrictions on fields of endeavor" requirement. It's source-available, not open source, on purpose.