0009. The CLI is `jf`, built on jj-cli
Status: accepted, 2026-10-02. Deciders: jjforge maintainers.
Context
Section titled “Context”People and agents drive jjforge from a terminal. A separate forge tool next to jj splits their attention, and a copy of jj’s commands would drift from jj.
Options: a standalone client next to jj, a jj alias, or a binary built on
jj-cli’s CliRunner, which adds commands to the full set of jj commands. For
the name: jjforge, jjf, forge, or jf.
Decision
Section titled “Decision”- The CLI is built on jj-cli’s
CliRunner. Every jj command works in it, and it adds the forge commands. - It is called
jf. People type it constantly, so the shortest name wins. It clashes with the JFrog CLI binary, and that cost is accepted. A person who has both installs one under another name. jftalks to the forge only through the public API, as ADR 0002 decides.- The CLI is specified in four layers:
- Conventions, in
cli.md. - Reference, which CI generates from clap and checks for drift.
- Behavior, as trycmd scenarios that each cite their requirement.
- JSON, which is exactly the OpenAPI schema for the same data.
- Conventions, in