diff --git a/src/client/client_keys.ml b/src/client/client_keys.ml
index 6f5b7114c..805cefa15 100644
--- a/src/client/client_keys.ml
+++ b/src/client/client_keys.ml
@@ -127,9 +127,11 @@ let commands () =
       (fun name sk cctxt ->
          Public_key.find_opt cctxt name >>=? function
          | None ->
-             failwith
-               "no public key named '%s', add it before adding the secret key"
-               name
+             let pk = Sodium.Sign.secret_key_to_public_key sk in
+             Public_key_hash.add cctxt
+               name (Ed25519.Public_key.hash pk) >>=? fun () ->
+             Public_key.add cctxt name pk >>=? fun () ->
+             Secret_key.add cctxt name sk
          | Some pk ->
              fail_unless
                (check_keys_consistency pk sk || cctxt.config.force)