Hello,
By separate file or stdin your really mean stdin, correct?  As in:

--8<---------------cut here---------------start------------->8---
guix something < args.txt or
echo "$args" | guix something
--8<---------------cut here---------------end--------------->8---

One note: since this mechanism could be generally useful, it should be
globally available (like 'guix build' options), for any 'guix'
invocation.
Actually, while using this shell script you could also pass a file directly i.e all of these will work:
-----(shell)------
./guix-shell-with-args /path/to/some/file-with-args
./guix-shell-with-args < /some/other/file
echo "something from stdin" | ./guix-shell-with-args
-------------------
If needed we could modify the script to only accept a file when a flag like --read-args-from-file is passed. It's a proof of concept, and I think some more work would need to be put in for actually implementing it since there are probably a whole class of possible bugs and errors that we have not considered.
I agree that it could be beneficial to all guix subcommands; I can see myself using it with `guix package` for example. In this case we could perhaps have a subcommand `guix with-args <subcommand>` which lets you invoke <subcommand> (install, package, build etc) with arguments from stdin or (optionally) a file.

At this point, we have a real Scheme API we can use :-).  If there's a
problem with using that, we should work toward improving it.

 Yes, on further deliberation I realized that I'm basically writing a DSL atop manifests   ^_^"

If more people see a use for this suggestion, I could try writing a more polished shell script for `guix with-args`

---
Happy Hacking!
Sarthak