diff --git a/cmd/program.go b/cmd/program.go
index 1d8b85be43379dda4024a563423bc793b8e0453e_Y21kL3Byb2dyYW0uZ28=..dafdd8181250992287324bb47411329e29f2a10e_Y21kL3Byb2dyYW0uZ28= 100644
--- a/cmd/program.go
+++ b/cmd/program.go
@@ -36,8 +36,10 @@
 }
 
 type subcommand[E any] struct {
-	name string
-	init func(*Program[E]) any
+	name             string
+	shortDescription string
+	longDescription  string
+	init             func(*Program[E]) any
 }
 
 type Program[E any] struct {
@@ -186,7 +188,10 @@
 	}
 }
 
-func WithSubcommand[E any](name string, init func(*Program[E]) any) Option[E] {
+func WithSubcommand[E any](
+	name string, shortDescription string, longDescription string,
+	init func(*Program[E]) any,
+) Option[E] {
 	return func(program *Program[E]) {
 		program.setupSubcommands = append(program.setupSubcommands, subcommand[E]{
 			name: name,
@@ -279,7 +284,10 @@
 	}
 
 	for _, subcmd := range program.setupSubcommands {
-		if _, err := parser.AddCommand(subcmd.name, subcmd.name, "", subcmd.init(&program)); err != nil {
+		if _, err := parser.AddCommand(
+			subcmd.name, subcmd.shortDescription, subcmd.shortDescription,
+			subcmd.init(&program),
+		); err != nil {
 			panic(err)
 		}
 	}