This is a great learning experience, thank you Ihor and Jonas for the friendly feedback!
(defcustom org-cite-basic-follow-actions '[["Open" ("b" "bibliography entry" org-cite-basic-goto (list (transient-scope) 0))] ["Copy" ("d" "DOI" org-cite-basic-follow.copy-doi)] ["Browse" ("u" "url" org-cite-basic-follow.browse-url)]] "Hepp" :group 'org-cite :type 'sexp) The bibliography entry demonstrates using any function (a bit ugly since org-cite-basic-goto insists on the prefix argument). (transient-define-prefix org-cite-basic-follow (citation &optional prefix) [:class transient-columns :setup-children org-cite-basic-follow--setup :pad-keys t] (interactive) (if org-cite-basic-follow-ask (transient-setup 'org-cite-basic-follow nil nil :scope (list citation)) (org-cite-basic-goto citation prefix))) Here I removed activating the transient menu if a prefix argument is present. If org-cite-basic-follow-ask is nil (the default) and I want to call org-cite-basic-goto with a prefix argument, this would cause the transient menu to activate, which seems wrong. (defun org-cite-basic-follow--setup (_) (transient-parse-suffixes 'org-cite-basic-follow (cl-map 'vector (lambda (group) (cl-map 'vector (lambda (entry) (pcase entry ((and (pred stringp) label) label) (`(,key ,desc ,fn ,transform) (list key desc `(lambda () (interactive) (apply ',fn ,transform)))) (`(,key ,desc ,suffix) (list key desc suffix)))) group)) org-cite-basic-follow-actions))) Prefixes of :class transient-columns expect a vector of vectors of a string and lists, so we need to use a map that produces vectors. This works. Do the code look OK to you? I'll prepare a patch if that is the case. Cheers, Tor-björn