Skip to main content

ak-cli

A small CLI I built for my own server management needs — quick answers to "what's using the RAM", "is this port open", "how full is the disk", without reaching for a full monitoring stack. Sharing it in case it's useful to someone else too.

Every command works both as a direct CLI call and from an interactive menu, so you can script it or just run ak and pick from a list.

Features

Command Description
system-info OS, architecture, Python version, hostname
disk-usage Usage for every mounted disk/partition
network-info IPv4 address of every network interface
memory-info RAM and swap usage
cpu-info Core count, current usage, frequency
process-list Top processes by memory usage
uptime System boot time and uptime
users Currently logged-in users
port-check Check whether a TCP port on a host is open
backup-init Create a backup config template
backup Archive configured folders and send to Telegram

Requirements

  • Python 3.11+

Installation

Clone the repo and install it in a virtual environment. uv is recommended:

git clone https://github.com/AmirKenzo/ak-cli.git
cd ak-cli
uv sync
uv run ak

Or with plain pip:

git clone https://github.com/AmirKenzo/ak-cli.git
cd ak-cli
python -m venv .venv
.venv/Scripts/activate   # on Linux/macOS: source .venv/bin/activate
pip install -e .
ak

Usage

Running ak with no arguments opens the interactive menu:

ak

Every command is also available directly, which is handy for scripts and one-liners:

ak system-info
ak disk-usage
ak memory-info
ak cpu-info
ak process-list --limit 5
ak port-check example.com 443
ak uptime
ak users

Backups

ak backup archives an explicit target — a known type or a folder path — into a .tar.gz and sends it to a Telegram chat via Telethon. A target is always required, so it never silently sends something you didn't ask for:

ak backup                    # error: target is required
ak backup pasarguard         # backs up /opt/pasarguard + /var/lib/pasarguard, nothing else
ak backup /etc/nginx         # backs up an arbitrary folder
ak backup pasarguard --keep  # also save the archive in the current directory

Known types live in BACKUP_TYPES in src/ak/backup.py (currently just pasarguard); anything else passed as the target is treated as a literal folder path.

ak backup-init   # interactive wizard: prompts for telegram creds, saves to ~/.config/ak/backup.json

If you skip backup-init and just run ak backup <target> in a terminal, it prompts you for the Telegram bot token/chat ID on the spot (and offers to save them) instead of failing. api_id/api_hash default to Telegram Desktop's public API credentials if left unset, so only bot_token and chat_id are needed. They can also be passed as flags for one-off/scripted runs:

ak backup pasarguard --bot-token "<token>" --chat-id -1001234567890

Config can also be provided entirely via environment variables — useful for cron/systemd, where there's no terminal to prompt on: AK_TG_API_ID, AK_TG_API_HASH, AK_TG_BOT_TOKEN, AK_TG_CHAT_ID, and AK_BACKUP_CONFIG to point at a non-default config file location.

The upload connects with a short per-attempt timeout and few retries so a blocked/unreachable network fails fast (within SEND_TIMEOUT_SECONDS, 900s) instead of hanging — if your server can't reach Telegram directly at all (common when self-hosting in regions that filter it), no client-side setting fixes that; you'd need a proxy in front of it.

Sending backend

Three libraries can do the actual upload; pick with --backend or AK_BACKUP_BACKEND (default: telethon) to compare speed on your network:

ak backup pasarguard --backend telethon    # default, no extra install
ak backup pasarguard --backend kurigram    # Pyrogram-compatible fork
ak backup pasarguard --backend pytdbot     # official TDLib, via pytdbot

Each backend needs its library installed — ak backup reports the exact command if it's missing. The speed-up packages are separate installs that pip/uv won't pull in unless you ask for the extra, so don't skip them:

Backend Install Speed-up package (don't skip)
telethon pip install akctl (already the default) cryptg — already included
kurigram pip install 'akctl[kurigram]' tgcrypto — included in the extra, needs a C compiler on platforms without a prebuilt wheel
pytdbot pip install 'akctl[pytdbot]' tdjson — included in the extra, ships a prebuilt TDLib binary for common platforms

Or install everything at once: pip install 'akctl[all-backends]' / uv tool install 'akctl[all-backends]'.

Notes:

  • kurigram is a maintained Pyrogram fork (same pyrogram import, same API); without tgcrypto it still works, just slower (pure-Python crypto).
  • pytdbot wraps the official TDLib and needs a local encrypted database directory (~/.config/ak/pytdbot/ by default) — this is TDLib's own requirement, not something this CLI adds.
  • telethon/kurigram fail fast on a blocked/dead connection (few retries, short per-attempt timeout). pytdbot doesn't expose that knob — on a fully blocked network it can retry internally for the full SEND_TIMEOUT_SECONDS before giving up, unlike the other two.

Roadmap

  • Scheduled (cron) backup runs
  • Including database dumps alongside the folder backups

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

akctl-0.1.6.tar.gz (35.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

akctl-0.1.6-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file akctl-0.1.6.tar.gz.

File metadata

  • Download URL: akctl-0.1.6.tar.gz
  • Upload date:
  • Size: 35.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for akctl-0.1.6.tar.gz
Algorithm Hash digest
SHA256 8811f08d40f1af1a1d1450439c79d928af9b346859f53e66d0b241fbb5243f39
MD5 7c81c9d5253012cb07e9cd39b370abdd
BLAKE2b-256 3e2be2f9aed0392ba399ce11fb93e4e61ff3c8d4ba190e77dd8ec195e5814624

See more details on using hashes here.

File details

Details for the file akctl-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: akctl-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 12.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for akctl-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 faaeb59b40d9bd63bf7a843ce69f4449177bc366291abacf21d50540aabc8bae
MD5 e1bfae27b8f7f539cf940923b1413d13
BLAKE2b-256 925af205c59cae4bc7a341055e167c7b02c11cc1150c8de7d37bfbcc1360a7d0

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

This release

0.1.6 This release

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page