As for "frameworks", I find JSON over stdin/stdout to do almost everything I need (Haskell's aeson package is good for this; I might try learning lenses too next time). I also make extensive use of env vars to pass options/config into programs, since I find their semantics (key/value pairs, globally readable, inheritable by child processes, overridable for child processes) more friendy than commandline arguments. Their only downside is being mutable, but that's easy enough to avoid in one's own code.
I also use Nix to manage all building, dependencies, etc. since it's trivial to get code written in many languages to play nicely together (my current project uses Haskell, Bash, Racket, Python, ML and Isabelle). Nix's "Hydra" build server is nice enough for continuous integration, although it's admittedly tricky to set up (it doesn't have proper versions; you need to find a git revision which works :( ).