diff --git a/doc/source/cli/convert.rst b/doc/source/cli/convert.rst
index 5d501ad..ac49179 100644
--- a/doc/source/cli/convert.rst
+++ b/doc/source/cli/convert.rst
@@ -158,7 +158,7 @@ If processing of JSON files by API URL is desirable, please
     Path (or URL, if :option:`--url` is specified) to file to be converted.
 
     If passed as ``-``, |soi| will attempt import of a plaintext or JSON
-    inventory from ``stdin``.
+    inventory from ``stdin`` (incompatible with :option:`--url`).
 
 .. option:: outfile
 
@@ -191,7 +191,8 @@ If processing of JSON files by API URL is desirable, please
 
 .. option:: -u, --url
 
-    Treat :option:`infile` as a URL for download.
+    Treat :option:`infile` as a URL for download. Cannot be used when
+    :option:`infile` is passed as ``-``.
 
 .. option:: -e, --expand
 
diff --git a/doc/source/cli/suggest.rst b/doc/source/cli/suggest.rst
index 6ffccb8..67de7e2 100644
--- a/doc/source/cli/suggest.rst
+++ b/doc/source/cli/suggest.rst
@@ -67,7 +67,7 @@ If download of JSON files by URL is desirable, please
     Path (or URL, if :option:`--url` is specified) to file to be searched.
 
     If passed as ``-``, |soi| will attempt import of a plaintext or JSON
-    inventory from ``stdin``.
+    inventory from ``stdin`` (incompatible with :option:`--url`).
 
 .. option:: search
 
@@ -103,7 +103,8 @@ If download of JSON files by URL is desirable, please
 
 .. option:: -u, --url
 
-    Treat :option:`infile` as a URL for download.
+    Treat :option:`infile` as a URL for download. Cannot be used when
+    :option:`infile` is passed as ``-``.
 
 
 
diff --git a/src/sphobjinv/cli/core.py b/src/sphobjinv/cli/core.py
index b74fd66..9e06b0b 100644
--- a/src/sphobjinv/cli/core.py
+++ b/src/sphobjinv/cli/core.py
@@ -203,6 +203,8 @@ def main():
     # These inventory-load functions should call
     # sys.exit(n) internally in error-exit situations
     if params[PrsConst.URL]:
+        if params[PrsConst.INFILE] == "-":
+            prs.error("argument -u/--url not allowed with '-' as infile")
         inv, in_path = inv_url(params)
     elif params[PrsConst.INFILE] == "-":
         inv = inv_stdin(params)
diff --git a/src/sphobjinv/cli/parser.py b/src/sphobjinv/cli/parser.py
index ae3a47a..b034ba6 100644
--- a/src/sphobjinv/cli/parser.py
+++ b/src/sphobjinv/cli/parser.py
@@ -299,9 +299,8 @@ def getparser():
     spr_convert.add_argument(
         "-" + PrsConst.QUIET[0],
         "--" + PrsConst.QUIET,
-        help="Suppress printing of status messages "
-        "and overwrite output files "
-        "without prompting",
+        help="Suppress printing of status messages and "
+        "overwrite output files without prompting",
         action="store_true",
     )
 
@@ -309,7 +308,9 @@ def getparser():
     spr_convert.add_argument(
         "-" + PrsConst.URL[0],
         "--" + PrsConst.URL,
-        help="Treat 'infile' as a URL for download",
+        help="Treat 'infile' as a URL for download. Cannot be used with --{}.".format(
+            PrsConst.URL
+        ),
         action="store_true",
     )
 
@@ -358,7 +359,9 @@ def getparser():
     spr_suggest.add_argument(
         "-" + PrsConst.URL[0],
         "--" + PrsConst.URL,
-        help="Treat 'infile' as a URL for download",
+        help="Treat 'infile' as a URL for download. Cannot be used with --{}.".format(
+            PrsConst.URL
+        ),
         action="store_true",
     )
 

diff --git a/tests/test_cli.py b/tests/test_cli.py
index a122112..6c0e450 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -460,6 +460,12 @@ class TestFail:
             file_url = "file:///" + str(in_path.resolve())
             run_cmdline_test(["convert", "plain", "-u", file_url], expect=1)
 
+    def test_clifail_no_url_with_stdin(self, run_cmdline_test):
+        """Confirm parser exit when -u passed with "-" infile."""
+        with stdio_mgr() as (in_, out_, err_):
+            run_cmdline_test(["convert", "plain", "-u", "-"], expect=2)
+            assert "--url not allowed" in err_.getvalue()
+
 
 class TestStdio:
     """Tests for the stdin/stdout functionality."""

Revise CLI to make read-from-stdin incompatible with '-u'
Ambiguous/inconsistent set of inputs, otherwise.

- [x] Implementation
- [x] Tests
- [x] Docs
tests/test_cli.py::TestFail::test_clifail_no_url_with_stdin
tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[src_path-no_dst_path-no_dst_name] tests/test_cli.py::TestConvertGood::test_cli_convert_default_outname[inv--json] tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[src_path-dst_path-no_dst_name] tests/test_cli.py::TestConvertGood::test_cli_stdin_clobber tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[no_src_path-dst_path-no_dst_name] tests/test_cli.py::TestConvertGood::test_cli_convert_default_outname[txt--zlib] tests/test_cli.py::TestConvertGood::test_cli_json_no_metadata_url tests/test_cli.py::TestConvertGood::test_cli_convert_default_outname[json--zlib] tests/test_cli.py::TestConvertGood::test_cli_convert_expandcontract tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[src_path-dst_path-dst_name] tests/test_cli.py::TestConvertGood::test_cli_convert_default_outname[txt--json] tests/test_cli.py::TestConvertGood::test_cli_convert_cycle_formats[testall_inv_path21] tests/test_cli.py::TestConvertGood::test_cli_convert_default_outname[inv--plain] tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[no_src_path-no_dst_path-dst_name] tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[no_src_path-dst_path-dst_name] tests/test_cli.py::TestConvertGood::test_cli_json_export_import tests/test_cli.py::TestConvertGood::test_cli_convert_default_outname[json--plain] tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[src_path-no_dst_path-dst_name] tests/test_cli.py::TestConvertGood::test_cli_convert_various_pathargs[no_src_path-no_dst_path-no_dst_name] tests/test_cli.py::TestConvertGood::test_cli_overwrite_prompt_and_behavior tests/test_cli.py::TestSuggestGood::test_cli_suggest_withscore tests/test_cli.py::TestSuggestGood::test_cli_suggest_noresults tests/test_cli.py::TestSuggestGood::test_cli_suggest_withindex tests/test_cli.py::TestSuggestGood::test_cli_suggest_long_list[y\n--t-57] tests/test_cli.py::TestSuggestGood::test_cli_suggest_long_list[--at-56] tests/test_cli.py::TestSuggestGood::test_cli_suggest_long_list[n\n--t-1] tests/test_cli.py::TestSuggestGood::test_cli_suggest_nameonly tests/test_cli.py::TestSuggestGood::test_cli_suggest_withscoreandindex tests/test_cli.py::TestSuggestGood::test_cli_suggest_many_results_stdin tests/test_cli.py::TestStdio::test_cli_stdio_input[SourceTypes.BytesPlaintext] tests/test_cli.py::TestStdio::test_cli_stdio_output[plain] tests/test_cli.py::TestStdio::test_cli_stdio_input[SourceTypes.DictJSON] tests/test_cli.py::TestStdio::test_cli_stdio_output[json] tests/test_cli.py::TestStdio::test_cli_stdio_zlib_input_fails tests/test_cli.py::TestStdio::test_cli_stdio_zlib_output_fails tests/test_cli.py::TestFail::test_clifail_convert_localfile_as_url tests/test_cli.py::TestFail::test_clifail_convert_badoutputdir tests/test_cli.py::TestFail::test_clifail_convert_wrongfiletype tests/test_cli.py::TestFail::test_clifail_convert_nosrc[False] tests/test_cli.py::TestFail::test_clifail_convert_missingfile tests/test_cli.py::TestFail::test_clifail_convert_pathonlysrc tests/test_cli.py::TestFail::test_clifail_convert_nosrc[True] tests/test_cli.py::TestMisc::test_cli_invocations[python tests/test_cli.py::TestMisc::test_cli_invocations[sphobjinv] tests/test_cli.py::TestMisc::test_cli_noargs_shows_help tests/test_cli.py::TestMisc::test_cli_version_exits_ok