{
  "report_info": {
    "version": "9.0.1",
    "generated_at": "2026-07-21T01:54:11Z",
    "binary_name": "online-info-switch"
  },
  "binary": {
    "name": "online-info-switch",
    "path": "/opt/kodachi/dashboard/hooks/online-info-switch",
    "timestamp": "2026-07-21T01:54:11Z",
    "file_info": {
      "size": 6554816,
      "sha256": "dc80c8413a6e5ac26d687ccb3b72cc9b1a66679982c916126301a37d1f11d96f"
    },
    "flag_n": {
      "command": "info",
      "data": {
        "author": "Warith Al Maawali",
        "copyright": "© 2026 Kodachi OS",
        "description": "Online information hub for Kodachi OS - RSS feeds, paste services, freshness proofs, and connectivity status",
        "features": [
          "Online/offline status checking via health-control",
          "RSS feed aggregation from security news sources",
          "Public paste service integration",
          "Proof of freshness with current news and blockchain data",
          "Crypto and precious metals prices, Bitcoin balance lookups",
          "Kodachi cloud, knet and Tor exit checks"
        ],
        "license": "Proprietary",
        "name": "online-info-switch",
        "securityFeatures": {
          "authentication": "Not provided by cli-core (see online-auth)",
          "encryption": "Not provided by cli-core",
          "inputValidation": "Argument parsing via clap; per-command validation is the consumer's responsibility",
          "rateLimiting": "Not provided by cli-core"
        },
        "systemRequirements": {
          "dependencies": [
            "OpenSSL",
            "libcurl"
          ],
          "os": "Linux (Debian-based)",
          "privileges": "root/sudo for system operations"
        },
        "version": "9.8.4 (build 320)",
        "website": "https://www.digi77.com"
      },
      "errors": [],
      "metadata": {
        "executionTime": 2,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:11.871219754Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    },
    "flag_v": {
      "command": "version",
      "data": {
        "buildDate": "REDACTED-BUILD-TIME",
        "gitCommit": "unknown",
        "name": "online-info-switch",
        "rustVersion": "1.82.0",
        "version": "9.8.4 (build 320)"
      },
      "errors": [],
      "metadata": {
        "executionTime": 2,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:11.981964142Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    },
    "flag_h": {
      "command": "help",
      "data": {
        "commandCategories": [
          {
            "category": "Connectivity",
            "commands": [
              {
                "description": "Show current online/offline status",
                "examples": [
                  "online-info-switch status",
                  "online-info-switch status --json",
                  "online-info-switch status --json-pretty"
                ],
                "name": "status",
                "options": [
                  {
                    "description": "Emit the status as compact JSON (global flag)",
                    "flag": "--json",
                    "required": false
                  },
                  {
                    "description": "Global request timeout",
                    "flag": "-t, --timeout <SECONDS>",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch status"
              }
            ]
          },
          {
            "category": "Kodachi Cloud",
            "commands": [
              {
                "description": "Check Kodachi release information",
                "examples": [
                  "online-info-switch releases",
                  "online-info-switch releases binary_pack",
                  "online-info-switch releases desktop",
                  "online-info-switch releases --json-pretty"
                ],
                "name": "releases",
                "options": [
                  {
                    "description": "Edition to report on: binary_pack, terminal or desktop. Omit for all of them",
                    "flag": "[EDITION]",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch releases [EDITION]"
              },
              {
                "description": "Fetch Kodachi cloud infrastructure statistics",
                "examples": [
                  "online-info-switch cloud-stats",
                  "online-info-switch cloud-stats --timeout 120",
                  "online-info-switch cloud-stats --json-pretty"
                ],
                "name": "cloud-stats",
                "options": [
                  {
                    "default": "60",
                    "description": "Request timeout. The stats endpoint can be slow",
                    "flag": "-t, --timeout <SECONDS>",
                    "required": false
                  },
                  {
                    "description": "Emit the statistics as compact JSON (global flag)",
                    "flag": "--json",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch cloud-stats"
              },
              {
                "description": "Check Kodachi network connection status",
                "examples": [
                  "online-info-switch knet-status",
                  "online-info-switch knet-status --json",
                  "online-info-switch knet-status --timeout 60"
                ],
                "name": "knet-status",
                "options": [
                  {
                    "default": "30",
                    "description": "Request timeout for the knet lookup",
                    "flag": "-t, --timeout <SECONDS>",
                    "required": false
                  },
                  {
                    "description": "Emit the knet state as compact JSON (global flag)",
                    "flag": "--json",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch knet-status"
              },
              {
                "description": "Check VPS Tor exit IP through SOCKS5 proxy",
                "examples": [
                  "online-info-switch vps-tor-check",
                  "online-info-switch vps-tor-check --socks-port 9150",
                  "online-info-switch vps-tor-check --socks-host 192.168.1.100 --socks-port 9051",
                  "online-info-switch vps-tor-check --json-pretty"
                ],
                "name": "vps-tor-check",
                "options": [
                  {
                    "default": "127.0.0.1",
                    "description": "SOCKS5 proxy host. Supplying it disables port auto-detection",
                    "flag": "--socks-host <HOST>",
                    "required": false
                  },
                  {
                    "default": "9050",
                    "description": "SOCKS5 proxy port. When neither flag is given, ports 9050, 9150 and the Kodachi pool 10000 to 10019 are probed and the first listener wins",
                    "flag": "--socks-port <PORT>",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch vps-tor-check [OPTIONS]"
              }
            ]
          },
          {
            "category": "Markets",
            "commands": [
              {
                "description": "Check cryptocurrency and precious metals prices",
                "examples": [
                  "online-info-switch price btc",
                  "online-info-switch price xmr",
                  "online-info-switch price gold",
                  "online-info-switch price all",
                  "online-info-switch price all --json"
                ],
                "name": "price",
                "options": [
                  {
                    "description": "Symbol to price: btc, eth, xmr, azero, near, gold, silver, xau, xag, or all",
                    "flag": "<COIN>",
                    "required": true
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch price <COIN>"
              },
              {
                "description": "Check Bitcoin wallet balance",
                "examples": [
                  "online-info-switch balance 34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo",
                  "online-info-switch balance bc1ql49ydapnjafl5t2cp9zqpjwe6pdgmxy98859v2 --json"
                ],
                "name": "balance",
                "options": [
                  {
                    "description": "Bitcoin address (legacy or bc1 Segwit). It is sent to public blockchain explorers, which see it and your exit IP",
                    "flag": "<ADDRESS>",
                    "required": true
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch balance <ADDRESS>"
              }
            ]
          },
          {
            "category": "News and Freshness",
            "commands": [
              {
                "description": "Fetch RSS feeds from security news sources",
                "examples": [
                  "online-info-switch rss",
                  "online-info-switch rss --max-items 5",
                  "online-info-switch rss --random",
                  "online-info-switch rss --sources \"darkreading,wired\"",
                  "online-info-switch rss --json-pretty"
                ],
                "name": "rss",
                "options": [
                  {
                    "description": "Comma separated list of RSS sources to fetch. Conflicts with --random",
                    "flag": "-s, --sources <SOURCES>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Fetch from a single randomly chosen source. Conflicts with --sources",
                    "flag": "-r, --random",
                    "required": false
                  },
                  {
                    "default": "10",
                    "description": "Maximum number of items to display",
                    "flag": "-m, --max-items <COUNT>",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch rss [OPTIONS]"
              },
              {
                "description": "Show proof of system freshness",
                "examples": [
                  "online-info-switch freshness",
                  "online-info-switch freshness --json",
                  "online-info-switch freshness --json-pretty"
                ],
                "name": "freshness",
                "options": [
                  {
                    "description": "Emit the freshness proof as compact JSON (global flag)",
                    "flag": "--json",
                    "required": false
                  },
                  {
                    "description": "Global request timeout for the news and blockchain fetches",
                    "flag": "-t, --timeout <SECONDS>",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch freshness"
              }
            ]
          },
          {
            "category": "Sharing",
            "commands": [
              {
                "description": "Upload content to public paste services",
                "examples": [
                  "echo \"Hello World\" | online-info-switch paste",
                  "online-info-switch paste \"Sample content\"",
                  "online-info-switch paste --file /path/to/file.txt",
                  "online-info-switch paste \"test\" --services \"paste.rs\"",
                  "online-info-switch paste \"test\" --services \"termbin.com\" --allow-termbin-plaintext",
                  "online-info-switch paste \"test\" --json-pretty"
                ],
                "name": "paste",
                "options": [
                  {
                    "description": "Content to paste. Read from stdin when omitted. Conflicts with --file",
                    "flag": "[TEXT]",
                    "required": false
                  },
                  {
                    "description": "Read the content from a file instead. Conflicts with TEXT",
                    "flag": "-f, --file <PATH>",
                    "required": false
                  },
                  {
                    "default": "all",
                    "description": "Comma separated services: paste.rs, dpaste.com, catbox.moe, termbin.com",
                    "flag": "-s, --services <SERVICES>",
                    "required": false
                  },
                  {
                    "default": "7",
                    "description": "Expiration in days. Accepted and parsed, but no backend service currently applies it",
                    "flag": "--expire <DAYS>",
                    "required": false
                  },
                  {
                    "default": "false",
                    "description": "Opt in to termbin.com. WARNING: plaintext TCP on port 9999, bypasses Tor and any proxy, exposes your real IP",
                    "flag": "--allow-termbin-plaintext",
                    "required": false
                  }
                ],
                "requires_sudo": false,
                "usage": "online-info-switch paste [TEXT] [OPTIONS]"
              }
            ]
          }
        ],
        "description": "Online information hub for Kodachi OS - RSS feeds, paste services, freshness proofs, and connectivity status",
        "environmentVariables": [
          {
            "default": "unset",
            "description": "Disable all colored output when set",
            "name": "NO_COLOR",
            "values": "1|true|yes (any value disables color)"
          }
        ],
        "exitCodes": {
          "0": "Success",
          "1": "General error",
          "2": "Invalid arguments",
          "3": "Permission denied",
          "4": "Network error",
          "5": "File not found"
        },
        "globalOptions": [
          {
            "description": "Print help information",
            "flag": "-h, --help"
          },
          {
            "description": "Print version information",
            "flag": "-v, --version"
          },
          {
            "description": "Display detailed information",
            "flag": "-n, --info"
          },
          {
            "description": "Show usage examples",
            "flag": "-e, --examples"
          },
          {
            "description": "Output in JSON format",
            "flag": "--json"
          },
          {
            "description": "Force output format (text|json)",
            "flag": "-o, --output-format <FORMAT>"
          },
          {
            "description": "Pretty-print JSON output with indentation",
            "flag": "--json-pretty"
          },
          {
            "description": "Enhanced JSON output with improved formatting (like jq)",
            "flag": "--json-human"
          },
          {
            "description": "Return only specified JSON fields (comma-separated)",
            "flag": "--json-filter <FIELD1,FIELD2>"
          },
          {
            "description": "Select specific fields to include in output (comma-separated)",
            "flag": "--fields <FIELD_LIST>"
          },
          {
            "description": "Limit number of results returned",
            "flag": "--limit <NUMBER>"
          },
          {
            "description": "Skip first N results (for pagination)",
            "flag": "--offset <NUMBER>"
          },
          {
            "description": "Working directory (defaults to auto-detected base directory)",
            "flag": "-d, --work-dir <PATH>"
          },
          {
            "description": "Set custom port number (1024-65535)",
            "flag": "--port <PORT>"
          },
          {
            "description": "Set log level (error|warn|info|debug)",
            "flag": "--log-level <LEVEL>"
          },
          {
            "description": "Enable verbose output",
            "flag": "--verbose"
          },
          {
            "description": "Suppress non-essential output",
            "flag": "--quiet"
          },
          {
            "description": "Disable colored output",
            "flag": "--no-color"
          },
          {
            "description": "Use custom configuration file",
            "flag": "--config <FILE>"
          },
          {
            "description": "Set operation timeout in seconds (optional; no default applied)",
            "flag": "--timeout <SECS>"
          }
        ],
        "name": "online-info-switch",
        "usage": "online-info-switch [OPTIONS] [COMMAND] [ARGS]"
      },
      "errors": [],
      "metadata": {
        "executionTime": 4,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:12.096580196Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    },
    "flag_e": {
      "command": "examples",
      "data": {
        "categories": [
          {
            "description": "The four things this tool is reached for most. Every command needs network access, and none of them need root.",
            "examples": [
              {
                "command": "online-info-switch status",
                "description": "Check whether the machine currently has working internet access",
                "expectedOutput": "🌐 System is online, followed by location and IP details when available",
                "notes": "Delegates the connectivity probe to health-control."
              },
              {
                "command": "online-info-switch rss --max-items 5",
                "description": "Read the five most recent security headlines",
                "expectedOutput": "Five headlines, each with publication date, source and link"
              },
              {
                "command": "online-info-switch freshness",
                "description": "Prove the system clock and its view of the world are current",
                "expectedOutput": "Current UTC time, the latest headlines and current blockchain data",
                "notes": "Useful after a suspend or a clock reset, and as evidence that a snapshot was taken today."
              },
              {
                "command": "online-info-switch price btc --json",
                "description": "Read one market price as JSON, for scripting",
                "expectedOutput": "{\"success\":true,\"coin\":\"BTC\",\"symbol\":\"BTC\",\"price_usd\":64210.5,\"source\":\"...\",\"timestamp\":\"...\"}"
              }
            ],
            "id": "0_quick_start",
            "title": "Quick Start"
          },
          {
            "description": "Every command takes the same global output flags. --json is the one to script against.",
            "examples": [
              {
                "command": "online-info-switch status --json",
                "description": "Compact single line JSON, meant for pipes and workflow steps",
                "expectedOutput": "{\"is_online\":true,\"status\":\"online\",\"connectivity\":\"FullConnectivity\",\"degraded\":false,\"message\":\"System is online\",\"timestamp\":\"...\"}"
              },
              {
                "command": "online-info-switch status --json-pretty",
                "description": "Indented JSON, for reading by eye",
                "expectedOutput": "The same object, indented over multiple lines"
              },
              {
                "command": "online-info-switch status --json-human",
                "description": "Colorized, human oriented rendering of the JSON",
                "expectedOutput": "The same fields, colored and aligned",
                "notes": "Colors are dropped automatically when the output is not a terminal."
              },
              {
                "command": "online-info-switch cloud-stats --timeout 120",
                "description": "Raise the global request timeout for a slow endpoint",
                "expectedOutput": "Cloud statistics, or a timeout error after 120 seconds",
                "notes": "--timeout (-t) is a global flag, in seconds. Without it, cloud-stats uses 60s and knet-status uses 30s."
              }
            ],
            "id": "1_output_formats",
            "title": "Output Formats"
          },
          {
            "description": "Pull security headlines from the configured feeds. Feeds are fetched over the current routing, so they travel through Tor or the VPN when those are active.",
            "examples": [
              {
                "command": "online-info-switch rss",
                "description": "Fetch the newest items from every configured source",
                "expectedOutput": "Up to 10 headlines, each with date, source and link",
                "notes": "A source that is unreachable is skipped rather than failing the whole command."
              },
              {
                "command": "online-info-switch rss --random",
                "description": "Fetch from one randomly chosen source instead of all of them",
                "expectedOutput": "Headlines from a single feed",
                "notes": "--random and --sources are mutually exclusive."
              },
              {
                "command": "online-info-switch rss --sources \"darkreading,wired\"",
                "description": "Fetch only from the named sources",
                "expectedOutput": "Headlines from darkreading and wired only",
                "notes": "Comma separated. Short form: -s."
              },
              {
                "command": "online-info-switch rss --max-items 5",
                "description": "Cap how many items come back",
                "expectedOutput": "The 5 newest headlines",
                "notes": "Defaults to 10. Short form: -m."
              },
              {
                "command": "online-info-switch rss --json-pretty",
                "description": "Get the feed items as structured JSON",
                "expectedOutput": "{\"items\":[{\"title\":\"...\",\"pub_date\":\"...\",\"source\":\"...\",\"link\":\"...\"}],\"total_items\":10}"
              }
            ],
            "id": "2_rss",
            "title": "RSS Feed Operations"
          },
          {
            "description": "Upload text to public paste services (paste.rs, dpaste.com and catbox.moe, all over HTTPS). Anything pasted becomes PUBLIC at a URL anyone can open, so never paste keys, credentials, or logs containing your IP. This command requires an authenticated session.",
            "examples": [
              {
                "command": "echo \"Hello World\" | online-info-switch paste",
                "description": "Paste from stdin to the default HTTPS services",
                "expectedOutput": "One URL per service: paste.rs, dpaste.com and catbox.moe",
                "notes": "Requires authentication: run `online-auth authenticate` first, otherwise the command returns \"Authentication required\" and exits non-zero."
              },
              {
                "command": "online-info-switch paste \"Sample content\"",
                "description": "Paste a literal string",
                "expectedOutput": "Paste URLs from the default services",
                "notes": "The pasted content is public and unencrypted. Treat every paste as permanent."
              },
              {
                "command": "online-info-switch paste --file /path/to/file.txt",
                "description": "Paste the contents of a file",
                "expectedOutput": "Paste URLs for the file contents",
                "notes": "Short form: -f. --file and the inline TEXT argument are mutually exclusive."
              },
              {
                "command": "online-info-switch paste \"test\" --services \"paste.rs\"",
                "description": "Send to a single named service",
                "expectedOutput": "A single paste.rs URL",
                "notes": "Short form: -s, default \"all\". Known services: paste.rs, dpaste.com, catbox.moe and termbin.com."
              },
              {
                "command": "online-info-switch paste \"test\" --services \"dpaste.com,catbox.moe,paste.rs\"",
                "description": "Send to several named services at once",
                "expectedOutput": "One URL per requested service"
              },
              {
                "command": "online-info-switch paste \"test\" --services \"termbin.com\" --allow-termbin-plaintext",
                "description": "Send to termbin.com, which needs an explicit opt-in",
                "expectedOutput": "A termbin.com URL",
                "notes": "WARNING: termbin.com uses unencrypted TCP on port 9999, which bypasses Tor and any proxy and exposes your real IP address. Without --allow-termbin-plaintext the service is skipped. Only use it on a trusted network when anonymity does not matter."
              },
              {
                "command": "online-info-switch paste \"test\" --json-pretty",
                "description": "Get the per-service results as JSON",
                "expectedOutput": "{\"results\":[{\"service\":\"paste.rs\",\"success\":true,\"url\":\"https://paste.rs/abc\"}],\"success\":true}",
                "notes": "When no service succeeds the result is success:false and the exit code is non-zero, so it can be tested in a workflow."
              }
            ],
            "id": "3_paste",
            "title": "Paste Service Operations"
          },
          {
            "description": "Combine the current time, the latest headlines and current blockchain data into evidence that the system's view of the world is up to date.",
            "examples": [
              {
                "command": "online-info-switch freshness",
                "description": "Print a human readable freshness proof",
                "expectedOutput": "Current UTC time, the newest headlines and current blockchain data",
                "notes": "Needs network access: it fetches live news and blockchain data, so it fails offline."
              },
              {
                "command": "online-info-switch freshness --json",
                "description": "Get the freshness proof as compact JSON for archiving",
                "expectedOutput": "{\"utc_time\":\"...\",\"local_time\":\"...\",\"ip_address\":\"...\",\"country\":\"...\",\"country_flag\":\"...\",\"headlines\":[...],\"bitcoin_block_height\":123456,\"crypto_prices\":[...],\"generated_at\":\"...\"}"
              },
              {
                "command": "online-info-switch freshness --json-pretty",
                "description": "Get the same proof, indented for reading",
                "expectedOutput": "The freshness object, indented"
              }
            ],
            "id": "4_freshness",
            "title": "Freshness Proof Operations"
          },
          {
            "description": "Live prices for crypto and precious metals, plus Bitcoin balance lookups. Prices come from public APIs, so these commands need network access and can be rate limited.",
            "examples": [
              {
                "command": "online-info-switch price btc",
                "description": "Check one cryptocurrency price",
                "expectedOutput": "BTC: 64,210.50 USD",
                "notes": "Accepted symbols: btc, eth, xmr, azero, near, gold, silver, xau, xag and all."
              },
              {
                "command": "online-info-switch price xmr",
                "description": "Check the Monero price",
                "expectedOutput": "XMR: 154.20 USD"
              },
              {
                "command": "online-info-switch price gold",
                "description": "Check a precious metal spot price",
                "expectedOutput": "XAU: 2,395.80 USD",
                "notes": "gold and silver are aliases for the xau and xag symbols; both spellings work."
              },
              {
                "command": "online-info-switch price all",
                "description": "Fetch every supported crypto and metal in one call",
                "expectedOutput": "BTC, ETH, XMR, NEAR, AZERO, GOLD and SILVER prices",
                "notes": "Crypto and metals are fetched in parallel. A provider that fails is left out of the result rather than failing the command."
              },
              {
                "command": "online-info-switch price all --json",
                "description": "Fetch every price as JSON, for a dashboard or a workflow step",
                "expectedOutput": "{\"success\":true,\"prices\":[{\"symbol\":\"BTC\",\"price_usd\":64210.5}],\"timestamp\":\"...\"}"
              },
              {
                "command": "online-info-switch balance 34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo",
                "description": "Look up the balance of a legacy Bitcoin address",
                "expectedOutput": "The address balance in BTC",
                "notes": "The address is sent to public blockchain explorers, which see both it and your exit IP. Do not look up an address you want kept private over a clearnet route."
              },
              {
                "command": "online-info-switch balance bc1ql49ydapnjafl5t2cp9zqpjwe6pdgmxy98859v2 --json",
                "description": "Look up a Segwit (bc1) address balance as JSON",
                "expectedOutput": "{\"address\":\"bc1...\",\"balance_btc\":0.0123,\"success\":true}"
              }
            ],
            "id": "5_markets",
            "title": "Cryptocurrency and Metals"
          },
          {
            "description": "Query the official Kodachi release API for the current version of each edition.",
            "examples": [
              {
                "command": "online-info-switch releases",
                "description": "Show the release info for every edition",
                "expectedOutput": "Version, date and download info for binary_pack, terminal and desktop"
              },
              {
                "command": "online-info-switch releases binary_pack",
                "description": "Show one edition only",
                "expectedOutput": "Binary Pack version, release date and installation info",
                "notes": "Editions: binary_pack, terminal, desktop."
              },
              {
                "command": "online-info-switch releases desktop",
                "description": "Check the Desktop ISO release",
                "expectedOutput": "Desktop ISO version and release date"
              },
              {
                "command": "online-info-switch releases --json-pretty",
                "description": "Get all release metadata as JSON, to compare against the installed version",
                "expectedOutput": "Indented JSON with one object per edition"
              }
            ],
            "id": "6_releases",
            "title": "Release Information"
          },
          {
            "description": "Check the Kodachi cloud backend, the knet connection and the Tor exit IP. These reach the Kodachi servers, so they need network access.",
            "examples": [
              {
                "command": "online-info-switch cloud-stats",
                "description": "Fetch Kodachi cloud infrastructure statistics",
                "expectedOutput": "User counts, challenge counts and infrastructure totals",
                "notes": "The stats endpoint can be slow, so the default timeout here is 60 seconds. Raise it with --timeout if it trips."
              },
              {
                "command": "online-info-switch cloud-stats --timeout 120 --json-pretty",
                "description": "Fetch the stats as JSON with a longer timeout",
                "expectedOutput": "Indented JSON with the cloud statistics"
              },
              {
                "command": "online-info-switch knet-status",
                "description": "Check whether this machine is on the Kodachi network",
                "expectedOutput": "knet: On, or knet: Off",
                "notes": "Default timeout is 30 seconds, overridable with --timeout."
              },
              {
                "command": "online-info-switch knet-status --json",
                "description": "Get the knet state as JSON, for the dashboard or a workflow condition",
                "expectedOutput": "{\"success\":true,\"data\":{\"is_kodachi\":true,\"knet\":\"On\"},\"response_time_ms\":42,\"timestamp\":\"...\"}"
              },
              {
                "command": "online-info-switch vps-tor-check",
                "description": "Check the exit IP through the local Tor SOCKS5 proxy",
                "expectedOutput": "Exit IP and the SOCKS5 proxy endpoint that was used; country is reported as unknown because the Tor check endpoint does not provide it",
                "notes": "With neither flag given, the SOCKS port is auto-detected: ports 9050, 9150 and the Kodachi multi-instance pool 10000 to 10019 are probed in parallel and the first listener wins. Requires a running Tor."
              },
              {
                "command": "online-info-switch vps-tor-check --socks-host 192.168.1.100 --socks-port 9051",
                "description": "Check the Tor exit through a specific remote SOCKS5 proxy",
                "expectedOutput": "Tor exit IP as seen through that proxy",
                "notes": "Passing EITHER flag disables auto-detection: the supplied values are used verbatim, and the one you leave out falls back to 127.0.0.1 or 9050."
              },
              {
                "command": "online-info-switch vps-tor-check --json-pretty",
                "description": "Get the exit check as JSON for a workflow",
                "expectedOutput": "{\"success\":true,\"data\":{\"exit_ip\":\"...\",\"country\":\"unknown\",\"socks_host\":\"127.0.0.1\",\"socks_port\":9050},\"response_time_ms\":42,\"timestamp\":\"...\"}"
              }
            ],
            "id": "7_cloud",
            "title": "Cloud Infrastructure and Tor Exit"
          }
        ],
        "description": "Usage examples for online-info-switch",
        "name": "online-info-switch",
        "quickReference": [
          "online-info-switch --help",
          "online-info-switch --version",
          "online-info-switch --info --json",
          "online-info-switch --examples",
          "online-info-switch status",
          "online-info-switch rss --max-items 5",
          "online-info-switch freshness",
          "online-info-switch price btc"
        ]
      },
      "errors": [],
      "metadata": {
        "executionTime": 2,
        "hostname": "REDACTED-BUILD-HOST",
        "user": "REDACTED-BUILD-USER"
      },
      "status": "success",
      "timestamp": "2026-07-21T01:54:12.324198043Z",
      "version": "9.8.4 (build 320)",
      "warnings": []
    }
  }
}
