Index: uspace/app/hrctl/hrctl.c
===================================================================
--- uspace/app/hrctl/hrctl.c	(revision eebecdc084dfdfda62b1c3e66f0fe06188bc639a)
+++ uspace/app/hrctl/hrctl.c	(revision 8b51009d8adb87b39341aef74db3eeb0f2a2fa7a)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Miroslav Cimerman
+ * Copyright (c) 2025 Miroslav Cimerman
  * All rights reserved.
  *
@@ -45,7 +45,7 @@
 #define HRCTL_SAMPLE_CONFIG_PATH "/cfg/sample_hr_config.sif"
 
-static void usage(void);
-static errno_t fill_config_devs(int, char **, int, hr_config_t *);
-static errno_t load_config(const char *, hr_config_t *);
+static void	usage(void);
+static errno_t	fill_config_devs(int, char **, int, hr_config_t *);
+static errno_t	load_config(const char *, hr_config_t *);
 
 static const char usage_str[] =
@@ -53,8 +53,8 @@
     "\n"
     "Options:\n"
-    "  -h, --help                display this help and exit\n"
+    "  -h, --help                display this message and exit\n"
     "  -C, --create-file=PATH    create an array from file,\n"
     "                            sample file at: " HRCTL_SAMPLE_CONFIG_PATH "\n"
-    "  -A, --assemble-file=PATH  create an array from file\n"
+    "  -A, --auto-assemble       try to auto assemble all valid arrays\n"
     "  -s, --status              display status of active arrays\n"
     "  -H, --hotspare=DEV        add hotspare extent\n"
@@ -62,5 +62,5 @@
     "  -F, --fail-extent         fail an extent, use with -D and set it before\n"
     "  -c, --create=NAME         create new array\n"
-    "  -a, --assemble=NAME       assemble an existing array\n"
+    "  -a, --assemble=NAME       assemble from specified extents\n"
     "  -n                        non-zero number of devices\n"
     "  -l, --level=LEVEL         set the RAID level,\n"
@@ -95,5 +95,5 @@
 	{ "level", required_argument, 0, 'l' },
 	{ "create-file", required_argument, 0, 'C' },
-	{ "assemble-file", required_argument, 0, 'A' },
+	{ "auto-assemble", no_argument, 0, 'A' },
 	{ "destroy", required_argument, 0, 'D' },
 	{ "fail-extent", required_argument, 0, 'F' },
@@ -253,5 +253,5 @@
 
 	while (c != -1) {
-		c = getopt_long(argc, argv, "hsC:c:A:a:l:0145Ln:D:F:H:",
+		c = getopt_long(argc, argv, "hsC:c:Aa:l:0145Ln:D:F:H:",
 		    long_options, NULL);
 		switch (c) {
@@ -282,12 +282,15 @@
 			break;
 		case 'A':
-			rc = load_config(optarg, cfg);
-			if (rc != EOK) {
-				printf("hrctl: failed to load config\n");
-				free(cfg);
-				return 1;
-			}
-			assemble = true;
-			goto skip;
+			size_t cnt;
+			rc = hr_auto_assemble(&cnt);
+			if (rc != EOK) {
+				/* XXX: here have own error codes */
+				printf("hrctl: auto assemble rc: %s\n",
+				    str_error(rc));
+			} else {
+				printf("hrctl: auto assembled %lu volumes\n",
+				    cnt);
+			}
+			return rc;
 		case 'a':
 			if (str_size(optarg) > sizeof(cfg->devname) - 1) {
@@ -303,8 +306,6 @@
 			free(cfg);
 			if (rc != EOK) {
-				if (rc == ENOENT)
-					printf("hrctl: service named \"%s\" does not exist\n",
-					    optarg);
-				return 1;
+				printf("hrctl: got %s\n", str_error(rc));
+				return rc;
 			}
 			return 0;
