Yes, use `interactive` with a Lisp sexp, not a literal string. You can use `read-from-minibuffer`, `read-string`, or `completing-read`. Provide the value returned by `(thing-at-point 'word)` as the `DEFAULT-VALUE` argument to one of those functions, not the `INITIAL-CONTENTS` argument. (You can use the initial-contents/input arg if you like, but Emacs convention prefers that you use the default-value arg nowadays.) As for the input *history* list: you can provide your own history variable, or you can just use the default history list, `minibuffer-history`. If you use your own then the only entries on it will be previous inputs to minibuffer-input reads that use your own history variable. That can mean less noise interactively, but it can also be handy to not be so specific. It's up to you.