Here is my version:

  #!/bin/bash
  
  printf "REPL for %s\n" "$@"
  
  notblank()
  {
    [ $# -gt 0 ]
  }
  
  while true ; do
    printf "%s> " "$@"
    read -r || break;
    notblank $REPLY || continue;
    eval command \"\$@\" "$REPLY"
  done
We keep the original parameters and expand them with "$@". There is a Bash feature that read with no args reads the line into the REPLY variable. We want that to be subject to splitting.

If $REPLY expands to nothing, including multiple whitespace, then we just want to print the prompt again: not quit and not run the command with no additional arguments.

The eval trick allows $REPLY to undergo expansion and splitting, so that shell syntax can freely be used in the REPL.

Test:

  $ ~/test/replify/replify.sh git
  REPL for git
  git> rev-parse HEAD 
  7ac594319e417266764a6bc041b74807f2fe13bd
  git> branch -r
    origin/HEAD -> origin/master
    origin/master
    origin/origin/master
  git> checkout "$TERM $TERM"
  error: pathspec 'xterm xterm' did not match any file(s) known to git.
  git> checkout $TERM
  error: pathspec 'xterm' did not match any file(s) known to git.
Cute, but not terribly useful without history recall and related features. This wants to be a feature of Bash. The regular Bash repl should have a prefix variable so it can appear to be in a sub-mode for a particular command.

Submit a patch for Bash to do this, and maybe you have something. Bash has a hook feature for command execution, IIRC, so this may be somehow doable without modifying Bash.

https://github.com/hanslub42/rlwrap

EDIT: beat to the punch, should've refreshed.