cvg is a Rust CLI/TUI for operating a local Clash Verge runtime through the Mihomo controller API.
It focuses on the practical control surface you actually use day to day:
- Runtime status and mode inspection
- Proxy group and node switching
- Delay testing
- Clash Verge subscription inspection and maintenance
- A keyboard-driven TUI for everyday use
This project is not affiliated with Clash Verge Rev. It works against a local Mihomo controller exposed by Clash Verge or a compatible Mihomo setup.
- CLI commands for:
statusmode get|setproxy groupsproxy use <group> <node>profile lsprofile show <uid|name|current>
- TUI pages for:
HomeGroupsProfilesSettings
- Automatic controller discovery:
- local Mihomo socket
- Clash Verge
config.yamlcontroller config
- Simplified Chinese UI by default
- Subscription add flow that only requires a URL
- subscription name is inferred automatically from provider metadata or URL host
cvg currently focuses on runtime control and direct editing of Clash Verge subscription files.
What it does well now:
- Inspect and control Mihomo runtime state
- Switch nodes in proxy groups
- Run delay tests in the TUI
- Read and maintain Clash Verge subscriptions from the terminal
What it does not fully solve yet:
- App-level Clash Verge profile switching through a dedicated bridge
- System proxy / service / lightweight mode management
- Rust stable toolchain
- A local Clash Verge / Mihomo runtime
- On Unix-like systems,
cvgwill first try the local Mihomo socket at/tmp/verge/verge-mihomo.sock
cargo buildTo run directly from source:
cargo run -- tuiTo install the binary locally:
cargo install --path .cvg status
cvg mode get
cvg mode set rule
cvg proxy groups
cvg proxy use GLOBAL "Bronze-新加坡-01"
cvg profile ls
cvg profile show current
cvg tuiGlobal connection options:
cvg --controller http://127.0.0.1:9097 --secret <secret> status
cvg --socket /tmp/verge/verge-mihomo.sock status
cvg --clash-verge-dir "/path/to/clash-verge-config" profile lscvg resolves the runtime controller in this order:
--socket--controllerwith optional--secret- Clash Verge local socket auto-discovery
- Clash Verge
config.yamlHTTP controller discovery
Core navigation:
Tab/Shift+Tab: switch pagesj/k: move selectionh/l: switch pane or pager: refreshq: quit
- Runtime overview
- Current selected subscription / group / node
- Active route summary
- Browse proxy groups and nodes
- Switch selected node with
Enter - Run delay tests with
dorD - Cycle node sorting with
s
- Add remote subscription with
a - Edit selected remote subscription with
e - Update selected remote subscription with
u - Update all remote subscriptions with
U - Delete selected subscription with
d
- Switch UI language and persist it immediately
cargo fmt --all
cargo checkMIT. See LICENSE.