libra open
Command reference for `libra open`
Resolve a remote URL into a web URL and optionally launch the system browser.
Synopsis
libra open [<remote>]Description
libra open determines the web-browsable URL for a repository and, in human-output
mode, opens it in the default system browser. The command accepts an optional
positional argument that can be either a configured remote name (e.g. origin) or a
direct URL.
When no argument is given, the command tries the following in order:
- The current branch's configured upstream remote.
- A remote named
origin. - The first configured remote (alphabetically).
If the resolved URL uses SSH or SCP syntax (git@host:path or ssh://...), it is
automatically transformed to an HTTPS URL. The final URL is validated to ensure it
uses http:// or https:// before being passed to the OS browser launcher. This
prevents local file access, javascript:, or other injection vectors.
On macOS the command uses open, on Linux xdg-open, and on Windows cmd /C start.
Options
| Flag / Argument | Description | Example |
|---|---|---|
<remote> | Remote name or direct URL. When omitted, auto-detects from tracking config or origin. | libra open origin |
--json | Emit structured JSON envelope to stdout instead of opening a browser (global flag). | libra open --json |
--machine | Compact single-line JSON without launching a browser (global flag). | libra open --machine |
--quiet | Suppress the "Opening ..." message on stdout. | libra open --quiet |
Common Commands
libra open
libra open origin
libra open https://github.com/libra-tools/libra
libra open --jsonHuman Output
Opening https://github.com/libra-tools/libra--quiet suppresses stdout.
Structured Output (JSON examples)
{
"ok": true,
"command": "open",
"data": {
"remote": "origin",
"remote_url": "[email protected]:libra-tools/libra.git",
"web_url": "https://github.com/libra-tools/libra",
"launched": false
}
}When the argument is a direct URL instead of a remote name, remote is null:
{
"ok": true,
"command": "open",
"data": {
"remote": null,
"remote_url": "https://github.com/libra-tools/libra",
"web_url": "https://github.com/libra-tools/libra",
"launched": false
}
}Schema Notes
remoteis the logical remote name, ornullwhen a direct URL was providedremote_urlis the raw URL from config (or the direct URL argument)web_urlis the transformed browsable HTTPS URLlaunchedistruewhen the browser was successfully spawned in human modelaunchedisfalsefor--json/--machine, where browser launch is intentionally skipped
URL Transformation Rules
| Input Format | Transformed Output |
|---|---|
https://github.com/user/repo.git | https://github.com/user/repo |
http://github.com/user/repo.git | http://github.com/user/repo |
[email protected]:user/repo.git (SCP) | https://github.com/user/repo |
ssh://[email protected]/user/repo.git | https://github.com/user/repo |
ssh://[email protected]:2222/repo.git | https://host.com/repo |
Design Rationale
Why support direct URLs?
The primary use case for libra open is quickly jumping to a repository's web interface.
Sometimes a developer or agent has a URL from a chat message, issue tracker, or log output
and wants to open it without first configuring a remote. Accepting direct URLs alongside
remote names makes the command a universal "open this repo in the browser" tool. If the
argument matches a configured remote name, that takes precedence; otherwise it is treated
as a literal URL. This dual-mode behavior eliminates a common friction point without
adding complexity.
Why not just use git web--browse?
git web--browse is an internal Git helper that launches a browser but has several
limitations: it does not transform SSH/SCP URLs to HTTPS, it does not validate URL
safety, and it requires the instaweb or browse helpers to be configured. Libra's
open command handles the full URL transformation pipeline (SCP to HTTPS, SSH to HTTPS,
.git suffix stripping) and validates that the final URL uses a safe scheme before
passing it to the OS launcher. This makes it work out-of-the-box for all common remote
URL formats without additional configuration.
Why URL safety validation?
When a remote URL is transformed and passed to an OS command (open, xdg-open,
cmd /C start), there is a risk of command injection or unintended file access if the
URL uses a scheme like file://, javascript:, or contains shell metacharacters. Libra
validates that the final URL uses only http:// or https:// before launching the
browser. On Windows, the URL is additionally quoted to prevent cmd.exe metacharacter
expansion. This defense-in-depth approach protects against both accidental misconfiguration
and deliberate attacks via crafted remote URLs.
Parameter Comparison: Libra vs Git vs jj
| Feature | Libra | Git | jj |
|---|---|---|---|
| Open repo in browser | libra open | git web--browse (manual) | N/A |
| Open specific remote | libra open origin | N/A | N/A |
| Open direct URL | libra open <url> | N/A | N/A |
| SSH-to-HTTPS transform | Automatic | N/A | N/A |
| SCP-to-HTTPS transform | Automatic | N/A | N/A |
| URL safety validation | http/https only | N/A | N/A |
| Structured output | --json / --machine | No | No |
| Auto-detect remote | Tracking -> origin -> first | N/A | N/A |
Error Handling
| Scenario | StableErrorCode | Exit | Hint |
|---|---|---|---|
| Not in a repo and no explicit URL | LBR-REPO-001 | 128 | "run this command inside a libra repository, or pass a URL" |
| No remote configured | LBR-REPO-003 | 128 | "add a remote first: 'libra remote add origin <url>'" |
| Remote configured but has no URL | LBR-REPO-003 | 128 | "configure the URL: 'libra config set remote.<name>.url <url>'" |
| Resolved URL is unsafe or invalid | LBR-CLI-003 | 129 | "pass an explicit https:// URL or configure a supported remote URL" |
| Failed to read remote config | LBR-IO-001 | 128 | -- |
| Failed to launch browser | LBR-IO-002 | 128 | "check that a default browser is configured" |