diff --git a/commands/option.go b/commands/option.go
index f068ec22893ee1c04d578b2d5fbf6596906b056b..8f11ace49e1120890776eb6213074685e1993dee 100644
--- a/commands/option.go
+++ b/commands/option.go
@@ -18,11 +18,43 @@ type Option struct {
 	Type        reflect.Kind // value must be this type
 	Description string       // a short string to describe this option
 
-	// TODO: add more features(?):
+	// MAYBE_TODO: add more features(?):
 	//Default interface{} // the default value (ignored if `Required` is true)
 	//Required bool       // whether or not the option must be provided
 }
 
+// constructor helper functions
+func NewOption(kind reflect.Kind, names ...string) Option {
+	if len(names) < 2 {
+		panic("Options require at least two string values (name and description)")
+	}
+
+	desc := names[len(names)-1]
+	names = names[:len(names)-2]
+
+	return Option{
+		Names:       names,
+		Type:        kind,
+		Description: desc,
+	}
+}
+
+func BoolOption(names ...string) Option {
+	return NewOption(Bool, names...)
+}
+func IntOption(names ...string) Option {
+	return NewOption(Int, names...)
+}
+func UintOption(names ...string) Option {
+	return NewOption(Uint, names...)
+}
+func FloatOption(names ...string) Option {
+	return NewOption(Float, names...)
+}
+func StringOption(names ...string) Option {
+	return NewOption(String, names...)
+}
+
 // Flag names
 const (
 	EncShort = "enc"