diff --git a/lib/cli.py b/lib/cli.py
index ab3a1d55ba205c2c19aaddf9db34b18ce228195f..8065f3da76c8ff50eb6cca742b10b9867b7b118d 100644
--- a/lib/cli.py
+++ b/lib/cli.py
@@ -53,12 +53,83 @@ __all__ = ["DEBUG_OPT", "NOHDR_OPT", "SEP_OPT", "GenericMain",
            "JobSubmittedException", "FormatTimestamp", "ParseTimespec",
            "ToStderr", "ToStdout", "UsesRPC",
            "GetOnlineNodes", "JobExecutor", "SYNC_OPT", "CONFIRM_OPT",
+           "ArgJobId", "ArgSuggest", "ArgUnknown", "ArgFile", "ArgCommand",
+           "ArgInstance", "ArgNode", "ArgChoice",
            ]
 
 NO_PREFIX = "no_"
 UN_PREFIX = "-"
 
 
+class _Argument:
+  def __init__(self, min=0, max=None, suggest=None):
+    self.min = min
+    self.max = max
+
+  def __repr__(self):
+    return ("<%s min=%s max=%s>" %
+            (self.__class__.__name__, self.min, self.max))
+
+
+class ArgSuggest(_Argument):
+  """Suggesting argument.
+
+  Value can be any of the ones passed to the constructor.
+
+  """
+  def __init__(self, min=0, max=None, choices=None):
+    _Argument.__init__(self, min=min, max=max)
+    self.choices = choices
+
+  def __repr__(self):
+    return ("<%s min=%s max=%s choices=%r>" %
+            (self.__class__.__name__, self.min, self.max, self.choices))
+
+
+class ArgChoice(ArgSuggest):
+  """Choice argument.
+
+  Value can be any of the ones passed to the constructor. Like L{ArgSuggest},
+  but value must be one of the choices.
+
+  """
+
+
+class ArgUnknown(_Argument):
+  """Unknown argument to program (e.g. determined at runtime).
+
+  """
+
+
+class ArgInstance(_Argument):
+  """Instances argument.
+
+  """
+
+
+class ArgNode(_Argument):
+  """Node argument.
+
+  """
+
+class ArgJobId(_Argument):
+  """Job ID argument.
+
+  """
+
+
+class ArgFile(_Argument):
+  """File path argument.
+
+  """
+
+
+class ArgCommand(_Argument):
+  """Command argument.
+
+  """
+
+
 def _ExtractTagsObject(opts, args):
   """Extract the tag type object.
 
@@ -311,6 +382,9 @@ class CliOption(Option):
   """Custom option class for optparse.
 
   """
+  ATTRS = Option.ATTRS + [
+    "completion_suggest",
+    ]
   TYPES = Option.TYPES + (
     "identkeyval",
     "keyval",