Why
afi is the rubric for agent-first CLIs. Culture is about to embed afi (and has already embedded agex) via the universal-verb triple explain / overview / learn. Today afi itself is missing overview, and the rubric doesn't check for it — so afi can't verify what it demands.
We need afi to model the contract it enforces, so the same afi cli verify can validate afi, agex, and every future culture-embedded CLI.
Scope
-
Add afi overview [path...] verb. Semantics: shallow map / one-liner summary for any node in the command tree (empty path = afi root). Supports --json like explain and learn do. Stdout-only on success.
-
Add a sixth rubric bundle afi.rubric.checks.overview_cmd parallel to explain_cmd: asserts the target CLI exposes overview, accepts a path, supports --json.
-
Formalize main(argv: list[str] | None = None) -> int as a required structural check in afi.rubric.checks.structure. The CLI must be importable and callable in-process without sys.exiting on normal paths (SystemExit reserved for argparse --help / --version and the thin bin-entry wrapper). Existing afi main already conforms — codify it.
-
afi cli verify on afi itself passes all six bundles.
-
Tag a release (`0.3.0` if SemVer), since this adds a public verb.
Why culture cares
Culture is preparing `culture afi` as a first-class namespace (parallel to `culture devex`). With these additions, culture's integration becomes a single shared helper — otherwise we duplicate typer-vs-argparse branching for every CLI we embed.
Full culture-side plan: see the tracking PR once it's opened against OriNachum/culture.
Why
afi is the rubric for agent-first CLIs. Culture is about to embed afi (and has already embedded agex) via the universal-verb triple
explain/overview/learn. Today afi itself is missingoverview, and the rubric doesn't check for it — so afi can't verify what it demands.We need afi to model the contract it enforces, so the same
afi cli verifycan validate afi, agex, and every future culture-embedded CLI.Scope
Add
afi overview [path...]verb. Semantics: shallow map / one-liner summary for any node in the command tree (empty path = afi root). Supports--jsonlikeexplainandlearndo. Stdout-only on success.Add a sixth rubric bundle
afi.rubric.checks.overview_cmdparallel toexplain_cmd: asserts the target CLI exposesoverview, accepts a path, supports--json.Formalize
main(argv: list[str] | None = None) -> intas a required structural check inafi.rubric.checks.structure. The CLI must be importable and callable in-process withoutsys.exiting on normal paths (SystemExit reserved for argparse--help/--versionand the thin bin-entry wrapper). Existing afimainalready conforms — codify it.afi cli verifyon afi itself passes all six bundles.Tag a release (`0.3.0` if SemVer), since this adds a public verb.
Why culture cares
Culture is preparing `culture afi` as a first-class namespace (parallel to `culture devex`). With these additions, culture's integration becomes a single shared helper — otherwise we duplicate typer-vs-argparse branching for every CLI we embed.
Full culture-side plan: see the tracking PR once it's opened against OriNachum/culture.