can1357/oh-my-pi · error · HTTPException
git remote helper transports are disabled
Error message
git remote helper transports are disabled
What it means
The proxy disables git remote-helper transports. Any URL matching _REMOTE_HELPER_RE (r"^[A-Za-z][A-Za-z0-9+.-]*::", e.g. 'ext::sh -c ...') is refused with HTTP 400, because remote helpers can execute arbitrary commands and are a known git attack vector.
Source
Thrown at python/robomp/src/proxy/server.py:348
raise HTTPException(400, "remote url must not contain params, query, or fragment")
path = parsed.path.strip("/")
if path.endswith(".git"):
path = path[:-4]
if path.lower() != expected_repo.lower():
raise HTTPException(400, f"remote url does not match repo {expected_repo!r}")
return _github_url_for_repo(expected_repo)
def _remote_auth_for_url(url: str, expected_repo: str, token: str) -> _RemoteAuth:
raw = url.strip()
if not raw or raw != url:
raise HTTPException(400, "remote url must not be empty or padded")
if _FORBIDDEN_URL_BYTES_RE.search(raw):
raise HTTPException(400, "remote url contains forbidden control bytes")
if raw.startswith("-"):
raise HTTPException(400, "remote url must not start with '-'")
if _REMOTE_HELPER_RE.match(raw):
raise HTTPException(400, "git remote helper transports are disabled")
scheme = (urlparse(raw).scheme or "").lower()
if scheme in ("http", "https"):
normalized = _normalized_github_https_url(raw, expected_repo)
return _RemoteAuth(url=normalized, token=token, auth_url=normalized)
return _RemoteAuth(url=raw, token=None, auth_url=None)
def _clone_remote_auth(clone_url: str, expected_repo: str, token: str) -> _RemoteAuth:
try:
return _remote_auth_for_url(clone_url, expected_repo, token)
except HTTPException:
log.warning(
"gh-proxy: refusing clone — clone_url is not permitted",
extra={"expected_repo": expected_repo},
)
raise
View on GitHub (pinned to 9690622007)
Solutions
- Use a normal transport (https:// or ssh) URL instead of a '<helper>::' URL
- Remove the helper prefix and clone the underlying real remote directly
- If you genuinely need a helper transport, do it locally with plain git outside the proxy
Example fix
// before
clone({ repo: "ext::sh -c git clone src dst" })
// after
clone({ repo: "https://github.com/org/repo.git" }) Defensive patterns
Strategy: validation
Validate before calling
if (/^[A-Za-z][A-Za-z0-9+.-]*::/.test(url)) throw new Error("remote helper transports are not allowed"); Type guard
function isPlainTransportUrl(u: unknown): u is string {
return typeof u === "string" && /^(https?|ssh|git):\/\//.test(u) && !/^[A-Za-z][A-Za-z0-9+.-]*::/.test(u);
} Prevention
- Use standard https/ssh remote URLs only
- Reject any '<word>::' prefix at input boundaries
- Do not pass user-supplied URLs straight into git clone without scheme allowlisting
When it happens
Trigger: Supplying a URL with a '<transport>::' prefix (e.g. 'ext::', 'git-remote-ext::') to an endpoint that resolves to _clone_remote_auth or _origin_remote_auth.
Common situations: Security research or exploit attempts using ext:: remote helpers; accidentally copying a documented helper URL into a repo field; tooling that emits transport-prefixed URLs.
Related errors
- invalid workspace_key {workspace_key!r}
- remote url contains forbidden control bytes
- remote url must not start with '-'
- The managed-skills root is a symlink; refusing to operate ou
- Managed skill "${name}" SKILL.md is a symlink; refusing to o
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/f77a88d5979a2540.
Report an issue: GitHub.