Пара моих ранних вкладов в опенсорс была мелкими фиксами, связанными с кодом завершения программы при ошибке (1, 2): чтобы это был не 0, а 1.

Еще тогда (9 лет назад) мне казалось, что это решенная проблема, и вообще best practice — второй пункт в базовых вещах. Все-таки, это один из простых способов интеграции с другими программами или с баш-скриптами. Сегодня агенты это активно используют, следуя философии Unix. Так вот, к сожалению, недавно пришлось зарепортить баг про код возврата для одной из внутренних утилит.

Есть и альтернативные способы коммуникации консольной программы с оболочкой — например, через управляющие последовательности, которые, по сути, просто спецсимволы для стандартного вывода, с помощью которых, кроме управления терминалом, можно передавать команды через терминал для ОС: послать уведомление, показать прогресс (типа такого), использовать буфер обмена, вывести гиперссылку. И тут прогресс не стоит на месте — например, недавно автор Ghostty предложил спецификацию для еще одной управляющей последовательности: статус задачи. Однако стоит отметить, что единого стандарта нет, и поддержка у терминальных приложений фрагментирована.