Команда вместо догадки
У ассистента, с которым я работаю, есть хук, который решает, можно ли в этом ходе менять файлы. Сначала он решал по словам: «давай», «исправь», «надо» — значит, работа; вопрос — значит, разговор.
За один день он ошибся в обе стороны. Я пожаловался, что ассистент сразу бросается править, а он воспринял жалобу как поручение и полез в файлы. Потом я выбрал вариант в окне с вопросами, и хук запретил правку: в выбранном варианте не было слова-приказа. Каждую ошибку можно было залатать ещё одним словом в списке, но список слов — это догадка, и она снова промахнётся на следующей фразе.
Я предложил другое: пусть я сам говорю, чего хочу, короткой командой в начале сообщения.
/go— делать. Первая строка ответа — «Понял так: …», чтобы я сразу видел, если понято не то.- без команды — разговор: ответ словами, любая правка в этом ходе отклоняется.
/q— только ответ;/iq— задай свой последний вопрос окном с вариантами./redo— ты понял не так: перескажи моё поручение и жди/go./stop— остановись и доложи, где стоишь./commitи/push— ровно один коммит или пуш в течение десяти минут./fail,/win,/mem— запись промаха, одобрения или факта моими словами.
Самое интересное оказалось в мелочах. Команда, набранная в окне, попадает в журнал сессии не текстом «/go», а разметкой, которая начинается с угловой скобки. Все проверки, читавшие журнал, считали такие строки служебными и не видели моих команд вовсе. Это нашёл живой пробный запуск, не тесты: тесты подавали команду так, как я её представлял, а не так, как она лежит на диске.
Разрешение на коммит я сделал одноразовым. Метка живёт десять минут, тратится на первом коммите и не действует для вложенных агентов: агент, которого запустил ассистент, коммитить за меня не может. Чтобы проверить, что это не на словах, кейсы гоняются с мутациями — по очереди выключаю срок жизни, одноразовость, запрет для агентов и проверку вида метки. Все четыре поломки кейсы ловят.
Вывод простой: если система угадывает намерение человека, дешевле дать человеку способ его назвать. Команда в начале сообщения стоит мне два символа, а избавляет от целого класса промахов.