I created a source package yagh that bundles the core components of git-hg, git-hg-again, and git-remote-hg, together with some improvements and some changes to make it easier to compare the different methods to each other. See this StackOverflow entry or the yagh README for details. This is still a work in progress; I will add a Makefile and some more comparisons later. I hope this is all agreeable to you and the authors of the other two packages. Perhaps you might also find some of the tweaks I made to your package useful. In any case, thanks very much (to all three of you) for your work on these tools.
Great! I'm interested in the logic you have added for handling branches and bookmarks, and wondering how well it works in practice. I originally tried to implement something similar but found the many small differences between bookmarks, git branches and mercurial branches to be quite confusing. Can you give me a quick summary of how your changes map them back and forth?
So new upstream bookmarks are pulled down into the local hg clone and pushed through to branches in the hidden git repo. We also keep a foo_branchtracker bookmark pointing to the tipmost head of all named hg branches. So that will get pushed through to a foo branch in the hidden git repo. We handle the default hg branch specially; its default_branchtracker is only advanced when there are more default heads coming from upstream, or if we push some new ones from git but they don't have any bookmark attached to them. New branches we create in git will translate into new bookmarks in our local hg repo, and we'll suppress advancing the default_branchtracker bookmark in that case. All the new bookmarks in our local hg repo except for the _branchtracker ones will have come from new git branches we pushed into the hidden git repo; so we send these all back upstream. Let me know if I can explain any of it better, or if you run into any problems.
It's working really well now with my little test repo. Let's see how it works in the real world...
Also, I think I figured out how to detect when a push was requested, without parsing the input stream. But I don't know how sensitive it is to the version of Git one is using or what system or whatever.
re-reading that, it doesn't look at all clear... but at least it's accurate :-) i'll wait and see if you have questions. ...  the "Frontends" page on my site explains this more fully.