Frequently Asked Questions
Answers to common questions about CMDOP: sessions persist through disconnections with a 30-second grace period, the agent runs on Raspberry Pi and IPv6 networks, self-hosted air-gapped deployment is supported, and the Python SDK requires Python 3.10+. Free, Pro, and Enterprise plans are available with a free tier for open source projects.
What are the general questions about CMDOP?
What happens if my internet drops during a long-running command?
Your command continues running on the server. CMDOP sessions persist independently of your connection. When you reconnect, youβll see any output that was produced while disconnected.
Thereβs a 30-second grace period after disconnection. If you reconnect within this window, you maintain the same session. After 30 seconds, the session closes but your processes keep running (if started with nohup or in the background).
Can I use CMDOP on a Raspberry Pi?
Yes. The CMDOP agent supports:
- Raspberry Pi 4 and 5 (arm64)
- Raspberry Pi 3 (armv7l)
- Raspberry Pi Zero 2 W (arm64)
Install with:
# Install the CMDOP agent on Raspberry Pi
curl -sSL https://cmdop.com/install.sh | bash
# Register and connect the device to your workspace
cmdop connectWhatβs the maximum number of machines per workspace?
Thereβs no hard limit on machines per workspace. Practical limits depend on your plan:
| Plan | Machines | Concurrent Sessions |
|---|---|---|
| Free | 5 | 2 |
| Pro | 100 | 20 |
| Enterprise | Unlimited | Unlimited |
How long are sessions retained?
Session data is retained for:
- Audit logs: 90 days (Pro), 1 year (Enterprise)
- Session history: 30 days
- Command output: Until session closes
Can I use CMDOP without an internet connection (air-gapped)?
Yes, with self-hosted deployment. In air-gapped mode:
- Deploy Control Plane on internal network
- Agents connect to internal server
- No external internet required
What data is sent to the cloud?
When using CMDOP Cloud:
- Machine metadata (hostname, OS, IP)
- Session metadata (start time, duration, commands)
- Terminal output (encrypted in transit)
- File metadata (not file contents by default)
We never store:
- Plaintext passwords
- SSH private keys
- Decrypted session content
How do I report a security vulnerability?
Email: [email protected]
Include:
- Description of vulnerability
- Steps to reproduce
- Potential impact
We respond within 24 hours and offer bounties for valid reports.
What are common technical issues and solutions?
Why does my session show GRACE_PERIOD status?
GRACE_PERIOD means your client disconnected but the server is waiting for reconnection. This happens when:
- Network temporarily drops
- You close laptop lid
- Mobile app goes to background
The grace period is 30 seconds. Either:
- Wait and reconnect within 30 seconds
- Wait for it to close and create new session
How do I fix βcertificate verify failedβ errors?
This usually means your system clock is wrong or CA certificates are outdated.
Fix:
-
Sync time:
# Synchronize system clock with NTP servers sudo timedatectl set-ntp true -
Update CA certificates:
# Ubuntu/Debian sudo apt update && sudo apt install ca-certificates # CentOS/RHEL sudo yum update ca-certificates # macOS brew install ca-certificates
Can I use CMDOP with IPv6-only networks?
Yes. CMDOP supports:
- IPv6-only connections
- Dual-stack (IPv4 + IPv6)
- NAT64/DNS64 environments
Configure agent:
# Enable IPv6-preferred connections for the agent
export CMDOP_PREFER_IPV6=true
cmdop connectWhy is file transfer slow?
Common causes:
- Large files over mobile: 100MB limit on iOS
- Network congestion: Check bandwidth
- Chunk size: Default is 10MB chunks
Optimize:
# Compress before transfer
tar -czf archive.tar.gz directory/
# Use sync for incremental updates
cmdop files sync ./local server:/remoteHow do I handle commands with special characters?
Use proper quoting:
# Single quotes for literal strings
cmdop exec server 'echo $HOME' # Prints $HOME
# Double quotes for variable expansion
cmdop exec server "echo $HOME" # Prints actual home path
# Escape special characters
cmdop exec server "echo \$HOME"Can I run graphical applications (X11 forwarding)?
X11 forwarding is not currently supported. CMDOP focuses on terminal access.
For graphical apps, consider:
- VNC tunneling (coming soon)
- Remote desktop solutions
- Web-based interfaces
How do I handle interactive prompts (sudo password)?
For sudo, use:
# Run with pseudo-terminal
cmdop terminal server
sudo apt update
# Enter password interactivelyOr configure passwordless sudo for specific commands:
# /etc/sudoers.d/cmdop
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart appHow does CMDOP compare to other tools?
CMDOP vs SSH: When should I still use SSH?
Use SSH for:
- X11 forwarding (not yet in CMDOP)
- SOCKS proxy
- Legacy system integration
- Lowest latency requirements
Use CMDOP for:
- Team access with audit logs
- Session persistence
- AI-assisted operations
- Mobile access
- Zero firewall configuration
CMDOP vs Tailscale: Can they work together?
Yes. Use together for:
- Tailscale: Network connectivity (VPN)
- CMDOP: Session management and access control
Setup:
- Machines connect via Tailscale
- CMDOP agent uses Tailscale IP
- Best of both worlds
CMDOP vs traditional RMM tools: Key differences?
| Feature | CMDOP | Traditional RMM |
|---|---|---|
| Terminal access | Native PTY | Often web-based |
| Session persistence | Yes | Usually no |
| AI integration | Built-in | Add-on |
| Open source agent | Yes | Rarely |
| Developer focus | High | Low |
What SDK questions are frequently asked?
What Python version is required?
Python 3.10 or later.
Is there a Node.js SDK?
Not currently. The Python SDK is the primary SDK. REST API is available for other languages.
How do I handle async operations?
Use AsyncCMDOPClient:
import asyncio
from cmdop import AsyncCMDOPClient
async def main():
# Create an async client connected to a remote machine
async with AsyncCMDOPClient.remote(api_key="...") as client:
# Execute a command and capture the output
result = await client.terminal.execute("ls")
print(result.output)
# Run the async function using asyncio event loop
asyncio.run(main())Whatβs the difference between local and remote mode?
| Mode | Connection | Auth | Use Case |
|---|---|---|---|
| Local | Unix socket | UID verification | Same machine as agent |
| Remote | gRPC over TLS | API key | Different machine |
What about the mobile app?
Why does the iOS app require iOS 18?
iOS 18 is required for:
- Swift 6 concurrency features
- Modern actor isolation
- Enhanced background tasks
Older iOS versions are not supported.
Why is the file size limit 100MB on mobile?
iOS memory constraints and App Store guidelines limit file operations. For larger files:
- Use CLI
- Split files
- Use compression
How do I clear the app cache?
- Settings > General > iPhone Storage
- Find CMDOP
- Tap βOffload Appβ
- Reinstall from App Store
How do I set up self-hosted CMDOP?
What database is required?
PostgreSQL 15 or later.
Redis 7 is optional but recommended for:
- Caching
- Real-time subscriptions
- Rate limiting
Can I use MySQL instead of PostgreSQL?
No. CMDOP requires PostgreSQL for:
- JSON support
- Full-text search
- Row-level security
How do I backup the database?
# PostgreSQL dump
pg_dump cmdop > backup.sql
# With compression
pg_dump cmdop | gzip > backup.sql.gzSchedule daily backups with cron:
0 2 * * * pg_dump cmdop | gzip > /backups/cmdop-$(date +\%Y\%m\%d).sql.gzHow does billing work?
What counts as an active machine?
A machine is βactiveβ if it connected to CMDOP in the billing period (monthly).
Are test/staging machines billed the same?
Yes. All machines count equally regardless of purpose.
What happens when I hit rate limits?
Youβll receive RateLimitError with:
retry_after_seconds- when to retrylimit- your current limitremaining- requests remaining
Handle in SDK:
from cmdop.exceptions import RateLimitError
try:
result = client.agent.run("task")
except RateLimitError as e:
# Wait for the recommended cooldown period before retrying
await asyncio.sleep(e.retry_after_seconds)
# Retry the operation after the rate limit window passesIs there a free tier for open source projects?
Yes. Contact [email protected] with:
- Project URL
- GitHub stars
- Brief description
We offer free Pro plans for qualifying open source projects.