Control Your Home Network
From Any Slack Channel.
Turn Slack messages into real-time commands across your LAN. Works seamlessly behind NAT, firewalls, and CGNAT with zero open ports. Discover network devices, send Wake-on-LAN packets, manage Docker containers, and execute commands on remote Windows and Linux PCs via authenticated standalone agents.
Engineered for Complete Network Autonomy
A lightweight, enterprise-grade architecture that bridges your Slack workspace to distributed machines without exposing a single open port.
Socket Mode & Zero Open Ports
Classic Slack bots require public HTTPS endpoints and port forwarding. Cmdiqo leverages Slack Socket Mode to establish a single encrypted outbound WebSocket connection. Works completely behind NAT, firewalls, and CGNAT with zero exposed ports.
- Zero open inbound firewall ports
- Works behind CGNAT, cellular, and hotel WiFi
- TLS encryption handled directly by Slack Bolt
Distributed Standalone Agents
Tiny standalone binaries compiled via PyInstaller and packed with UPX. Authenticode signed with digital certificates for Windows 10/11/Server and native systemd service packaging for Ubuntu, Debian, Fedora, and Raspberry Pi OS.
- Authenticode code-signed Windows executables
- One-command systemd and Windows Service installers
- Persistent outbound WebSocket with HMAC auth
YAML-Driven Extensibility
Add custom commands in seconds without writing bot code. Simply define command triggers, arguments, and regex captures in commands.yaml. Execute shell scripts with timeouts or invoke pure Python functions returning rich text.
- Captured argument placeholders like {host} and {svc}
- Configurable execution timeouts and working directories
- Automatic slash command aliases like /home or /wol
LAN Discovery & Wake-on-LAN
Keep complete visibility of your home network. Discover active devices via arp-scan with ip neigh fallback, map MAC vendors, ping IP addresses, and send Wake-on-LAN magic packets to wake sleeping PCs across subnets.
- Instant ARP sweep of local subnet with MAC lookup
- Wake-on-LAN magic packet injection
- Live agent ping and connectivity checks
Docker & Container Ops
Control Docker containers running on any host from your mobile Slack app. Inspect running containers, inspect memory and CPU utilization stats, tail the last 50 lines of logs, and trigger compose restarts on demand.
- Live docker ps and resource stats snapshots
- Tail container logs straight into Slack threads
- Automatic thread responses with clean formatting
Remote Host Telemetry
Query real-time hardware and OS metrics across your fleet. Inspect uptime, free RAM, drive space partitions, and top CPU-consuming processes on Windows and Linux machines without SSH or RDP overhead.
- Instant RAM and storage utilization metrics
- Cross-platform top CPU process identification
- Safe remote system reboot and shutdown commands
System Services & Windows Updates
Manage system background daemons remotely. Query service states, restart failing services via systemd or Windows Service Control Manager, and query installed Windows Hotfix updates for security compliance.
- Service status inspection and restart triggers
- Windows SCM and Linux systemd unification
- Installed Windows Update hotfix auditing
Parental & Distraction Guard
Enforce digital focus or bedtime rules in one message. Instantly block or restore YouTube, Roblox, Minecraft, and Discord at the OS hosts and DNS layer across child PCs, accompanied by automatic DNS resolver flushes.
- One-tap block for YouTube, Roblox, Discord & Minecraft
- Instant DNS resolver flushing (Windows & Linux)
- Query live shield status without physical access
Experience Cmdiqo Right in Your Browser
Click a quick command pill below or type your own slash command into the interactive Slack simulator. Experience how real-time Socket Mode acknowledgments and output blocks arrive in Slack channels.
ws://0.0.0.0:8765 (3 remote agents online).Type a slash command or click one of the pills above to test remote network operations!
/lan devices listIP ADDRESS MAC ADDRESS HOST NAME
192.168.1.1 aa:bb:cc:dd:ee:ff router.home
192.168.1.10 22:33:44:55:66:77 nas.home
192.168.1.20 11:22:33:44:55:66 rpi4-server.home
192.168.1.55 88:99:aa:bb:cc:dd workstation-win11.homeDecoupled Three-Tier Topology
Engineered specifically for home labs and distributed networks. Outbound WebSockets eliminate inbound firewall holes, dynamic DNS headaches, and reverse proxy vulnerabilities.
1. Slack Cloud Platform
Users interact seamlessly via Slack desktop, browser, or mobile apps. Slash commands and messages are queued through Slack's secure cloud infrastructure.
2. cmdiqo-bot & WebSocket Hub
Runs as a Docker container or Python service on your primary local server. Connects OUTBOUND to Slack via Socket Mode, parses YAML commands, checks user permissions, and dispatches tasks to remote agents.
3. Distributed cmdiqo-agent Daemons
Single-file binaries compiled with PyInstaller and packed with UPX. Each agent maintains a persistent outbound WebSocket to the Hub, executes commands safely, and streams stdout/stderr back.
End-to-End Command Dispatch Lifecycle
ws://<hub_ip>:8765 with Bearer token authentication:{
"type": "hello",
"name": "PC-OLO",
"version": "1.0.42",
"platform": "windows"
}{
"id": "a1b2c3d4e5f67890123456789abcdef0",
"type": "exec",
"kind": "ps1",
"cmd": "Get-Service | Where-Object {$_.Status -ne 'Running'} | Format-Table -AutoSize",
"cwd": null,
"timeout": 180
}{
"id": "a1b2c3d4e5f67890123456789abcdef0",
"type": "result",
"ok": true,
"code": 0,
"output": "Status Name DisplayName\n------ ---- -----------\nStopped ALG Application Layer Gateway Service...",
"error": null
}Built-In Operations & Custom Extensions
Explore default Slack commands for network administration, remote diagnostics, and container management. Extend effortlessly with your own custom shell scripts or Python functions in commands.yaml.
lan devices list/lan devices listList all devices seen on local network via ARP broadcast scan
IP ADDRESS MAC ADDRESS HOST NAME
192.168.1.1 aa:bb:cc:dd:ee:ff router.home
192.168.1.10 22:33:44:55:66:77 nas.home
192.168.1.20 11:22:33:44:55:66 rpi4-server.home
192.168.1.55 88:99:aa:bb:cc:dd workstation-win11.home
/wol 00:11:22:33:44:55/lan wake 00:11:22:33:44:55Send Wake-on-LAN magic packet to boot a sleeping PC or server
✨ Magic packet sent to 00:11:22:33:44:55 on port 9
(broadcast 255.255.255.255). Target device should boot shortly.
/lan ping 192.168.1.1Ping an IP or hostname from Hub container to verify latency
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.421 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.389 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.405 ms
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max = 0.389/0.405/0.421 ms
/lan agents listList all connected remote agents, platform, version, and IP
CONNECTED AGENTS (3 online):
NAME PLATFORM IP VERSION CONNECTED
home-nas linux 192.168.1.10 1.0.42 3d 14h 22m
PC-GAMING windows 192.168.1.55 1.0.42 8h 12m 04s
rpi-sensor linux 192.168.1.20 1.0.42 12d 02h 11m
/home uptime/host home uptimeCheck system uptime, boot time, and current load average
[home] Uptime: 45 days, 8 hours, 12 minutes
Boot time: 2026-08-11 14:22:18 UTC
Load Average: 0.18, 0.22, 0.19 (4 cores)
/home memory/host home memoryInspect RAM usage, free memory, and swap utilization
[home] MEMORY USAGE:
Total RAM: 31.2 GB
Used RAM: 12.4 GB (39.7%)
Available: 18.8 GB (60.3%)
Swap: 2.0 GB used of 8.0 GB
/home disk/host home diskCheck disk partitions, mounts, and available storage space
[home] FILESYSTEM USAGE:
Filesystem Size Used Avail Use% Mounted on
/dev/nvme0n1p2 938G 312G 579G 36% /
/dev/sda1 7.3T 4.1T 2.9T 59% /data/storage
/dev/sdb1 3.6T 1.2T 2.3T 35% /mnt/backup
/host home topDisplay top 10 CPU-consuming processes on remote host
[home] TOP CPU PROCESSES:
PID USER %CPU %MEM COMMAND
14202 docker 14.2 8.1 plex-transcoder
18911 root 3.8 2.4 containerd
2290 node 2.1 3.2 homebridge
841 systemd 0.4 0.2 systemd-journald
/home docker ps/host home docker psList all running and stopped Docker containers
CONTAINER ID IMAGE STATUS PORTS NAMES
b8f9e0a12c4d plexinc/pms-docker Up 14 days 0.0.0.0:32400->32400/tcp plex
a1b2c3d4e5f6 homeassistant/home Up 45 days 0.0.0.0:8123->8123/tcp homeassistant
e7f8a9b0c1d2 portainer/portainer Up 45 days 0.0.0.0:9443->9443/tcp portainer
3c4d5e6f7a8b pihole/pihole:latest Up 45 days 0.0.0.0:53->53/udp pihole
/home docker restart plex/host home docker restart plexRestart Docker container or docker compose service
✅ [home] Container plex restarted successfully in 2.14s.
Status: Up 2 seconds (healthy)
/host home docker statsSnapshot of CPU, RAM, and network usage per container
NAME CPU % MEM USAGE / LIMIT MEM % NET I/O
plex 8.42% 1.41GiB / 31.24GiB 4.52% 142MB / 8.9GB
homeassistant 1.12% 485MiB / 31.24GiB 1.51% 45MB / 12MB
pihole 0.28% 128MiB / 31.24GiB 0.40% 89MB / 67MB
/host PC-OLO servicesList active system daemons (systemd or Windows SCM)
[PC-OLO] ACTIVE SYSTEM SERVICES:
SERVICE NAME DISPLAY NAME STATUS
cmdiqo-agent Cmdiqo Agent Daemon Running
LanmanServer Server (SMB/CIFS) Running
wuauserv Windows Update Running
WinDefend Microsoft Defender Antivirus Service Running
/host PC-OLO win updatesQuery installed Windows updates and recent hotfixes
[PC-OLO] RECENT WINDOWS HOTFIXES:
HotFixID Description InstalledBy InstalledOn
KB5039212 Security Update NT AUTHORITY\SYSTEM 2026-09-12
KB5038285 Update NT AUTHORITY\SYSTEM 2026-08-20
KB5037771 Security Update NT AUTHORITY\SYSTEM 2026-07-15
/host PC-KIDS parental onBlock YouTube, Roblox, Discord, Minecraft in hosts file & flush DNS
🛡️ [PC-KIDS] Parental Guard ENABLED.
Blocked domains: youtube.com, roblox.com, minecraft.net, discord.com
DNS resolver cache flushed successfully.
/host PC-KIDS parental offUnblock gaming and video sites and restore normal internet access
🔓 [PC-KIDS] Parental Guard DISABLED.
Hosts file restored. DNS resolver cache flushed successfully.
/host PC-KIDS parental statusQuery active parental blocking status without physical access
[PC-KIDS] Parental Guard Status:
Status: ACTIVE 🛡️
Blocked categories: Entertainment (YouTube), Gaming (Roblox, Minecraft), Chat (Discord)
Rule applied at: 2026-09-25 18:00:00
Download Standalone Binaries & Containers
Precompiled standalone executables for Windows and Linux, multi-architecture Docker containers, and the offline console emulator.
Windows x64 Standalone Agent
Includes code-signed cmdiqo-agent.exe, automated PowerShell service installer (install-service.ps1), uninstall script, and configuration templates.
# 1. Extract zip and navigate to directory:
Expand-Archive cmdiqo-agent-windows-x64.zip -DestinationPath C:\cmdiqo-agent
cd C:\cmdiqo-agent
# 2. Configure agent environment:
Copy-Item agent.env.example agent.env
# Edit agent.env with your HUB_URL, AGENT_TOKEN, and AGENT_NAME
# 3. Install as automatic background Windows Service:
powershell.exe -ExecutionPolicy Bypass -File .\install-service.ps1
Linux x64 Standalone Agent
Single-file UPX packed binary cmdiqo-agent with automated systemd service installer script (install-service.sh) and environment files.
# 1. Unzip archive:
unzip cmdiqo-agent-linux-x64.zip -d /opt/cmdiqo-agent
cd /opt/cmdiqo-agent
# 2. Configure agent environment:
cp agent.env.example agent.env
# Edit agent.env with HUB_URL, AGENT_TOKEN, AGENT_NAME
# 3. Install and start as systemd service:
sudo ./install-service.sh
Docker Hub Bot Container
All-in-one container including Python runtime, Slack Bolt with Socket Mode, WebSocket Hub server, arp-scan LAN tools, and Docker CLI.
# Pull image from Docker Hub:
docker pull lhotakj/cmdiqo-bot:latest
# Run container with your .env file:
docker run -d --name cmdiqo-bot \
--restart unless-stopped \
--net host \
--env-file .env \
-v /var/run/docker.sock:/var/run/docker.sock \
lhotakj/cmdiqo-bot:latest
Interactive Slack Simulator
Built-in interactive Slack console emulator. Test commands, regex captures, and live remote agents without needing Slack credentials or Socket Mode.
# Clone repository and run interactive simulator:
git clone https://github.com/lhotakj/cmdiqo.git
cd cmdiqo
python run.py sim
From Zero to Full Network Control
Follow these four simple steps to provision your Slack App, run the bot container, and register your first remote agent.
Create the Slack App
Go to api.slack.com/apps → Create New App → From scratch.
- Socket Mode: Settings → Socket Mode → Enable. Create an App-level Token with scope
connections:write(copyxapp-...). - Bot Scopes: OAuth & Permissions → Add
commands,chat:write,channels:read,groups:read,channels:join,channels:history. - Slash Commands: Add
/help,/lan,/host, and optional aliases/home,/wol. - Install: Click Install to Workspace and copy the Bot User OAuth Token (
xoxb-...).
Configure Environment
Create a .env file on your primary server alongside your docker-compose.yml:
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_APP_TOKEN=xapp-your-app-token
# Optional: Restrict to authorized user IDs
ALLOWED_USERS=U0123ABCDEF,U0456GHIJKL
# Optional: Shared secret for agents
AGENT_TOKEN=my-secret-tokenStart the Bot Container
Launch via Docker or run directly with Python. The bot opens a secure outbound TLS WebSocket to Slack:
# Run via Docker:
docker run -d --name cmdiqo-bot \
--restart unless-stopped \
--net host \
--env-file .env \
-v /var/run/docker.sock:/var/run/docker.sock \
lhotakj/cmdiqo-bot:latest
# Or pure Python:
python run.py hubConnect Remote Agents
Run the lightweight standalone binary on any Windows or Linux host across your network:
# Windows:
.\cmdiqo-agent.exe --hub-url ws://192.168.1.10:8765 --token my-secret --name PC-01
# Linux:
./cmdiqo-agent --hub-url ws://192.168.1.10:8765 --token my-secret --name nas💡 Run .\install-service.ps1 on Windows or sudo ./install-service.sh on Linux to automatically register as background system services that start on boot!
YAML Command Engine & Environment Variables
Customize commands, aliases, timeouts, and authorization allow-lists using declarative YAML configuration.
# Define custom aliases
aliases:
- name: home
input: "/home"
output: "/host home"
description: "Shortcut alias targeting host 'home'"
# Define modular commands
commands:
- name: host-docker-restart
category: docker
trigger: "/host {host} docker restart {service}"
description: "Restart docker compose service"
kind: shell
target: "{host}"
run: "docker compose -f /docker/{service}/docker-compose.yml restart"
timeout: 60
- name: lan-devices-list
category: lan
trigger: "/lan devices list"
description: "List LAN devices via ARP sweep"
kind: python
handler: "commands.devices:list_devices"Environment Variables Reference
Slack & Bot Credentials
SLACK_BOT_TOKENRequiredSLACK_APP_TOKENRequiredAccess Control & Security
ALLOWED_USERSOptional(empty: anyone with channel access)ALLOWED_CHANNELSOptional(empty: all invited channels)AGENT_TOKENOptional(empty: unauthenticated)Agent Configuration
HUB_URLRequiredws://127.0.0.1:8765AGENT_NAMEOptional(hostname)COMMAND_TIMEOUTOptional180SHELL_TIMEOUTOptional120