Context
Cross-repo eval epic: the eval product ships a `forge-eval` CLI binary. To keep developer muscle memory unified (devs already use `forge`), Forge should adopt the kubectl-style subcommand discovery pattern: any `forge-*` binary on PATH becomes a `forge *` subcommand.
Scope
In `forge-cli`, when the first positional argument isn't a known built-in subcommand:
- Look up `forge-` on PATH
- If found, exec it with the remaining args
- If not found, fall back to current "unknown command" error
Standard pattern:
```bash
$ forge eval init # routes to /usr/local/bin/forge-eval init
$ forge unknown-foo # "unknown command 'unknown-foo'"
```
Tab completion can be extended to discover `forge-*` binaries and offer them as completion candidates.
Reference implementations
We want the git/kubectl model: zero registration, PATH-driven.
Out of scope
- A plugin registry / install mechanism
- Sandboxing or permission-scoping plugins (they run with Forge's perms by design)
Test plan
Dependencies
None. Independent enabling work for FORGE-EVAL-2 and EVAL-14 (CLI).
Cross-repo refs: initializ/eval#14 (the consumer — `forge-eval` binary).
Context
Cross-repo eval epic: the eval product ships a `forge-eval` CLI binary. To keep developer muscle memory unified (devs already use `forge`), Forge should adopt the kubectl-style subcommand discovery pattern: any `forge-*` binary on PATH becomes a `forge *` subcommand.
Scope
In `forge-cli`, when the first positional argument isn't a known built-in subcommand:
Standard pattern:
```bash
$ forge eval init # routes to /usr/local/bin/forge-eval init
$ forge unknown-foo # "unknown command 'unknown-foo'"
```
Tab completion can be extended to discover `forge-*` binaries and offer them as completion candidates.
Reference implementations
We want the git/kubectl model: zero registration, PATH-driven.
Out of scope
Test plan
Dependencies
None. Independent enabling work for FORGE-EVAL-2 and EVAL-14 (CLI).
Cross-repo refs: initializ/eval#14 (the consumer — `forge-eval` binary).