Skip to content

Инструменты агента ​

Принятое направление (владелец, 19 октября 2026) · шаги 1–3 и инструменты солвера созданы в API и приложении: каталог, его инструменты чтения, предложения управляющего по графику, три инструмента солвера и, с шага 3, предложения по людям магазина и самому магазину, проверено на Agentfy в памяти и сверено с локальным Agentfy, не развёрнуто · с 20 октября 2026 инструменты солвера принимают ограничения людей, прочитанные в их описаниях, проверено на Agentfy в памяти и один раз с локальным Agentfy, не развёрнуто; с того же дня они сами передают описания агенту, если он не передал ограничений, проверено на Agentfy в памяти, один раз проверено с локальным Agentfy, не развёрнуто; и собственные правила магазина из его описания, проверено на Agentfy в памяти, один раз проверено с локальным Agentfy, не развёрнуто · шаг 4 — план · ассистент владельца и его инструменты (владелец, 20 октября 2026) созданы, проверено на Agentfy в памяти и один раз сверено с локальным Agentfy, не развёрнуто · создание магазина, часовой пояс и статус магазина и несколько приглашений одной карточкой (23 октября 2026) созданы и проверены на Agentfy в памяти, с локальным Agentfy не сверены, не развёрнуто · с 26 октября 2026 планы и замены солвера могут использовать свои часы, которые он задаёт сам, с пометкой на карточке, проверено на Agentfy в памяти, с локальным Agentfy не сверено, не развёрнуто · карточка упоминается, только когда её сделал инструмент, и пометка чата под ответом, который говорит о несделанной карточке (владелец, 28 октября 2026), проверено на Agentfy в памяти, один раз на локальном Agentfy, не развёрнуто · с 28 октября 2026 они по умолчанию закрывают каждый час работы хотя бы одним человеком и говорят на карточке, какие часы остаются без людей, проверено на магазине, который создаёт тест, с локальным Agentfy не сверено, не развёрнуто · с 30 октября 2026 должность человека берётся из списка должностей команды, по названию, с её описанием; проверено на Agentfy в памяти, с локальным Agentfy не сверено, не развёрнуто · с 30 октября 2026 неудачный вызов говорит, почему (неверные аргументы по полям, отказы своими словами, сбои в логе), проверено на Agentfy в памяти, с локальным Agentfy не сверено, не развёрнуто · с 30 октября 2026 инструменты солвера принимают ограничения, пустые или нет, только с отпечатком отданных ими описаний, проверено через инструменты на демо-магазинах и на Agentfy в памяти, с локальным Agentfy не сверено, не развёрнуто · с 5 ноября 2026 solve_week спрашивает недостающие описания, прежде чем планировать, а ассистент владельца записывает описание должности через edit_position, проверено через настоящий /mcp на Agentfy в памяти, с живым агентом не проверено, не развёрнуто · с 10 ноября 2026 правила, прочитанные в описаниях, хранятся рядом с ними (save_rules), проверено через инструменты на магазине, созданном тестом, и на копии локальных данных владельца, с живым агентом не проверено, не развёрнуто · с 11 ноября 2026 ассистент владельца создаёт должность (create_position), а люди магазина отвечают на просьбу коллеги (answer_colleague) и подтверждают свою опубликованную неделю (confirm_week), каждое — карточкой, проверено через настоящий /mcp на Agentfy в памяти, с живым агентом не проверено, не развёрнуто · с 11 ноября 2026 обмен или подмена по имени коллеги и датам, все подходящие смены коллеги в find_cover, дни недели рядом с датами и отказ для дат далеко от сегодняшней, проверено через настоящий /mcp на Agentfy в памяти, с живым агентом не проверено, не развёрнуто

Ассистент магазина в итоге должен делать всё, что вошедший управляющий или сотрудник может делать в Shiffty, с правами этого человека и по тем же правилам, что и приложение, — кроме публикации графика, которая остаётся действием человека. Решения по запросам на изменение приходят вместе с солвером: ассистент готовит решение, управляющий его подтверждает.

Один каталог инструментов, написанных для модели: каждый инструмент — задача, о которой попросил бы человек, и каждый вызывает тот же код, что и экраны приложения.

Что решил владелец ​

19 октября 2026 владелец установил четыре правила для инструментов ассистента:

  1. Агент не одобряет и не отклоняет запросы на изменение и не публикует график — пока. Позже добавится солвер, и с ним агент будет строить графики и решать по запросам. До тех пор инструментов для этих трёх действий нет вообще, даже выключенных.
  2. Нет ассистента для владельца или для всей компании. Один агент на магазин, как и раньше; владелец по-прежнему делает свои дела в приложении. Заменено 20 октября 2026: владелец получает ассистента с правами владельца на всю компанию (ниже).
  3. Кроме правила 1, запретного нет. Агент может делать всё, что вошедшему человеку можно делать в приложении, всегда с правами этого человека и с проверкой по тем же правилам, что и в приложении. Когда управляющему можно что-то изменить вручную, ассистент может помочь ему это изменить; когда нельзя, ассистенту тоже нельзя.
  4. Инструменты выбираются и пишутся вручную, а не генерируются из API. Инструмент размером с задачу («кого не хватает в субботу?»), а не с эндпоинт, и его описание написано для модели: на что он отвечает, в каких единицах, с какими ограничениями.

В тот же день владелец добавил солвер (19 октября 2026): с ним агент строит неделю, взвешивает запросы на изменение и решает по ним. Это снимает правило 1 для одобрения и отклонения — только как инструменты уровня propose: управляющий подтверждает каждое решение в приложении, и подтверждение выполняет обычное одобрение или отклонение с правами управляющего. Публикация недели остаётся действием человека: инструмента для неё нет. Отмена решения — тоже не инструмент. См. инструменты солвера.

20 октября 2026 владелец заменил правило 2: владелец получает собственного ассистента, одного на компанию, со всем, что владельцу можно делать в приложении, — все магазины, управляющие тоже. Каждое изменение остаётся карточкой, которую подтверждает владелец; при подтверждении API снова проверяет правила. Публикация недели становится возможной только для владельца, как карточка, которую владелец подтверждает, — владелец по-прежнему публикует сам, подтверждая; ассистент управляющего по-прежнему не может публиковать. Права берутся только из разговора, никогда не от модели. См. инструменты владельца.

Решения также записаны в Открытых вопросах.

Как устроен инструмент ​

Каждая часть API объявляет свои инструменты рядом с маршрутами своих экранов — графика, магазина, людей и запросов, — а один реестр собирает их для агента. У каждого инструмента есть:

  • имя, которое не меняется, как только агенты им пользуются;
  • описание для модели;
  • строгий список аргументов: незнакомый инструменту аргумент отклоняется, и ни один аргумент не может называть человека, роль или разрешение — кто спрашивает, всегда берётся из гранта разговора (как разрешается вызов). Одно исключение с 20 октября 2026: storeId называет, с каким магазином работает инструмент, — это цель, проверяемая по правам спрашивающего: владелец называет любой магазин компании, управляющий или сотрудник — только свой, а всё остальное не находится;
  • кто может им пользоваться: сотрудники, управляющие, владелец (с 20 октября 2026) или несколько из них;
  • уровень: read, propose или direct (ниже);
  • возможность, которая должна быть в гранте разговора.

Реестр не запускается, если инструмент нарушает одно из этих правил, если инструмент или действие публиковали бы, кроме инструмента propose владельца, или если инструмент, который одобряет, отклоняет или решает по запросу, имеет уровень не propose. Каждый вызов записывается в журнал по имени инструмента и результату, но никогда — по аргументам. С 30 октября 2026 неудачный вызов говорит, почему: аргументы, которые не подходят инструменту, возвращаются как invalid_arguments с каждым неверным полем и причиной, чтобы модель могла исправить вызов; отказ, который задуман правилами, — отсутствующее или истёкшее разрешение разговора, инструмент не для роли спрашивающего, — возвращается своими словами; а сбой в Shiffty записывается в журнал как tool_failed и в лог сервера со стеком и только идентификаторами, а модель получает лишь то, что вызов не удался (до этого все три случая возвращались одним и тем же общим отказом, и в лог не писалось ничего).

Три уровня ​

УровеньЧто происходитПример
readВыполняется сразу и ничего не меняет.Сетка недели, день с покрытием
proposeГотовит изменение и показывает его в чате карточкой. Ничего не меняется, пока человек не подтвердит карточку в приложении (для запроса на изменение кнопка называется Send request); подтверждение снова проверяет правила такими, какие они в этот момент, и затем вносит изменение.Проверить выходной: карточка «Отправить этот запрос?»
directМеняет что-то сразу — только собственные ответы человека с низким риском, после того как он сказал «да» в разговоре. С 10 ноября 2026 также правила, которые ассистент прочитал в описаниях, уже подтверждённых человеком (save_rules); приложение показывает их под каждым описанием.Отправить мой подтверждённый запрос; сохранить правила, прочитанные в описаниях

Карточки — те же, что чат показывает с SHIF-20. С шага 2 карточка может нести любое предложенное действие: запрос на изменение, новую неделю, изменение недели, шаблоны смен, почасовую нагрузку. Каждая карточка показывает заголовок, что изменится, простыми словами и по строке на каждое изменение, и предупреждения проверок.

Карточка — только когда её сделал инструмент ​

Решение владельца от 28 октября 2026 года; создано в API и приложении, проверено на Agentfy в памяти и один раз на локальном Agentfy, не развёрнуто. В тот день ассистент владельца писал «изменения готовы, подтверди карточку на странице Расписание» в ответах, где не вызвал ни одного инструмента, — карточки не было, а карточки показываются в чате, не на странице Расписание. Подтверждение по-прежнему — кнопка на карточке; «подтверждаю» текстом ничего не подтверждает.

  • Что сказано ассистенту. Он упоминает карточку или говорит, что изменение готово, только когда инструмент в этом же ответе её вернул. Просьба что-то изменить идёт в её инструмент в этом же ответе, а не в обещание. На «подтверждаю» текстом он отвечает, что это делает кнопка на карточке, указывает на открытую карточку из прошлого ответа, если речь о ней, и делает новую карточку, если просьба изменилась. Он никогда не говорит, что что-то применено, если этого не сказал инструмент или подтверждённая карточка.
  • Что делает чат, если он всё же так скажет. Под ответом, который говорит о карточке, но её не сделал, тихая строка: «No card was created in this reply — ask again to get one» (приложение пока только на английском), а если открыта карточка из прошлого ответа — указывает на неё. Подтверждение, набранное текстом, подсвечивает открытую карточку и прокручивает к ней. Карточка из прошлого ответа остаётся в разговоре, и её по-прежнему можно подтвердить.
  • Что не решено. Ассистент всё ещё может ошибиться в словах — однажды он сказал, что карточка «должна появиться ниже», хотя она была из прошлого ответа. И когда один из вызовов инструментов в ответе не удался, весь ответ заканчивается ошибкой, даже если ассистент потом справился; карточка из такого ответа видна только после перезагрузки разговора.

Что создано: шаг 1 ​

Создано 19 октября 2026, не развёрнуто. Семь инструментов, с которыми агенты были подключены сначала, сохраняют свои имена и ответы; девять инструментов чтения — новые. Всё время — по часам в часовом поясе магазина, а часы — за вычетом перерывов.

ИнструментДля когоУровеньНа что отвечает
my_shiftsСотрудник, управляющийreadОпубликованные смены человека на этой или следующей неделе
team_weekУправляющийreadНеделя магазина одной сеткой, с итогами, часами без дежурного и покрытием
check_changeСотрудник, управляющийproposeПроходит ли выходной, замена, обмен или новые часы по правилам; карточка, если проходит
find_coverСотрудник, управляющийreadКто мог бы подменить или поменяться сменой
explain_refusalСотрудник, управляющийreadПочему изменение не проходит и что это исправит
submit_change_requestСотрудник, управляющийdirectОтправляет собственный подтверждённый запрос человека; по нему всё равно нужно решение
request_statusСотрудник, управляющийreadСобственные запросы человека и на каком этапе каждый
day_viewУправляющийreadОдин день: кто когда работает, а по часам — обычное число чеков, нужные кассы, люди на кассах и где не хватает
month_sheetУправляющийreadЛист месяца: смены всех, часы, выходные и часы по договору
duty_gapsУправляющийreadЧасы недели без дежурного управляющего
person_weekУправляющийreadНеделя одного человека в сравнении с его часами по договору
store_infoСотрудник, управляющийreadМагазин: часы работы, часовой пояс, описание, статус ассистента; для управляющего также почасовая нагрузка, чеки на кассира и шаблоны смен
store_peopleУправляющийreadЛюди магазина: должность (её название, описание владельца и в архиве ли она), роль, управляющий, часы по договору, статус и описание там, где управляющему можно его читать; и действующие должности команды — те, которые можно дать человеку
requests_to_decideУправляющийreadЗапросы, по которым решает управляющий, ожидающие или решённые — только чтение
request_detailСотрудник, управляющийreadОдин запрос целиком: собственный запрос человека или тот, по которому решает управляющий
waiting_for_meСотрудник, управляющийread«Ждёт вас»: коллега, который просит подменить или поменяться, неделя на подтверждение и счётчики

Разговор сотрудника не может дотянуться до инструмента управляющего, а разговор управляющего никогда не дотягивается до другого магазина: каждый ответ — о собственном магазине того, кто действует, через те же проверки, что и экраны.

Что создано: шаг 2 ​

Создано 19 октября 2026, не развёрнуто. Управляющий теперь может менять график через ассистента, всегда в виде предложения: инструмент пробует изменение тем же кодом, что и редактор в приложении, ничего не записывает и показывает карточку; управляющий подтверждает карточку в приложении. У сотрудника этих инструментов нет.

ИнструментДля когоУровеньЧто предлагает
create_weekУправляющийproposeНовую черновую неделю, пустую или копию предыдущей, как «Новая неделя» в графиках: сколько смен копируется и сколько остаётся за бортом
change_weekУправляющийproposeЛюбое число изменений смен одной недели одной карточкой: добавить, изменить и удалить, с временем, перерывом, началом перерыва и зоной или по шаблону смены по имени
manage_templatesУправляющийproposeДобавить, изменить, удалить и переупорядочить шаблоны смен магазина
set_hourly_loadУправляющийproposeОбычное число чеков магазина по дням недели и часам, каждый слот «было → станет»
set_receipts_per_cashierУправляющийproposeСколько чеков один кассир проводит за час

Как работает предложение:

  • Те же правила, что в редакторе. change_week проводит каждое изменение через редактор графика: часы работы магазина, не больше трёх непересекающихся смен у человека в день, прошедшие недели только для чтения, смена с открытым запросом заблокирована, а строки самих управляющих — за владельцем. Инструмент выполняет всё изменение в базе и откатывает его, поэтому предупреждения на карточке — это то, что говорит сам редактор: отдых меньше 11 часов, часы сверх договора, часы без дежурного управляющего и часы, когда на кассе меньше людей, чем нужно касс.
  • Всё или ничего. Изменение, которое нарушает правило, не предлагается: ответ инструмента называет изменение, на котором он остановился, и причину, а ассистент сообщает это управляющему.
  • Подтверждение проверяет снова. Подтверждение карточки выполняет изменение ещё раз с правами подтверждающего, на тот момент. Если кто-то после создания карточки изменил те же смены, копируемую неделю, шаблоны или почасовую нагрузку, карточка отклоняется как устаревшая и ничего не меняется; ассистент может предложить её заново. Карточка выполняется один раз: потерянный ответ восстанавливается по карточке, а не выполняется дважды.
  • Без публикации. Новая неделя остаётся черновиком; публикация остаётся за управляющим в графиках (решение 1).

Каждый вызов записывается в журнал по имени инструмента и результату, как на шаге 1; предложение, отклонённое правилами, записывается как отклонённое.

Что создано: инструменты солвера ​

Созданы 19 октября 2026, проверены через настоящий /mcp с Agentfy в памяти и на демо-магазинах из начальных данных, не развёрнуты. Они используют те же карточки предложений, что и шаг 2. Что делает солвер и где его пределы — на странице Агент и солвер.

ИнструментДля когоУровеньЧто делает
solve_weekУправляющийproposeПлан солвера на неделю команды магазина: по строке карточки на каждую добавленную или убранную смену — строка смены, часы которой солвер задал сам, когда не подошёл ни один шаблон, кончается «Custom hours: …» с причиной (с 26 октября 2026, свои часы), — а предупреждениями — часы, где по-прежнему не хватает кассиров, нет дежурного управляющего или — с 28 октября 2026, когда каждый час работы по умолчанию требует хотя бы одного человека (каждый час работы закрыт), — нет никого на смене («Fri 17:00–18:00: nobody on shift — …»), каждое с причиной, и переработки. Для черновой недели или ещё не созданной подтверждение записывает смены в черновик; он никогда не публикует. Опубликованная неделя получает план как совет, без карточки
evaluate_requestУправляющийreadВзгляд солвера на запрос, по которому решает управляющий: неделя с изменением против недели как она есть, нужная замена (замена со своими часами так и помечена; час работы, который изменение оставляет без людей, тоже требует замены, с 28 октября 2026) и рекомендация — одобрить или отклонить — с причинами
decide_requestУправляющийproposeОдобрение или отклонение управляющего (для отклонения нужна причина, которую увидит автор запроса); карточка предупреждает, если солвер рекомендует обратное; подтверждение выполняет обычное одобрение или отклонение
save_rulesУправляющийdirectС 10 ноября 2026: сохраняет правила, которые ассистент прочитал в описаниях, до 20 за вызов, каждое проверяется так же, как ограничения в solve_week, с правами на изменение этих описаний; без карточки — правила видны под каждым описанием в приложении и на карточке недели (Агент и солвер)

Подтверждение проверяет ещё раз: план, неделя которого изменилась с тех пор, отклоняется как устаревший, а запрос, по которому тем временем решили, — тоже; ничего не делается дважды.

Ограничения из описаний (с 20 октября 2026, решение владельца в тот же день). Все три инструмента принимают необязательный список constraints: перед solve_week агент читает store_people (и store_info) и передаёт то, что описание человека прямо говорит о том, когда или где он работает, — дни без работы, один участок, часы, часы в день или пожелание — каждое с source, словами, из которых оно взято. Агенту сказано никогда их не выдумывать, для подсказки на уровне магазина предлагать почасовую нагрузку или шаблон, а управляющему говорить, какие применены и какие пропущены. Карточка показывает их под заголовком «Read from the descriptions · correct them if wrong», по строке на каждое с источником, а пропущенные — с причиной. С 5 ноября 2026 ограничение, которое солвер не может применить, останавливает вызов: ничего не планируется, и ответ (needsConstraints, причина rejected) называет каждое с причиной, чтобы его исправили и прислали снова в том же ходе; то, что не выражается ни одним видом, агент передаёт в ignored, и пропущенным показывается только это (Агент и солвер). До этого одно неверное ограничение пропускалось с причиной. С того же дня (решение владельца) каждое описание, которое передают инструменты, — магазина, каждой должности, каждого человека — должно быть учтено: процитировано ограничением, указано в ignored (человека) или названо в новом списке noConstraints, когда в нём нет ничего, что выражает какой-либо вид; иначе ничего не планируется, и ответ — needsConstraints с причиной incomplete, где названо пропущенное. А солвер даёт человеку одну смену в день, если описание не допускает разделённых смен (splitShifts) (Агент и солвер; проверено через инструменты на магазине, который пишет тест, и на копии локальных данных владельца, не проверено с локальным Agentfy, не развёрнуто). Что делает каждый вид — на странице Агент и солвер.

Описания учитываются без просьбы (с 20 октября 2026, решение владельца в тот же день; проверено через настоящий /mcp с Agentfy в памяти, один раз проверено с локальным Agentfy, не развёрнуто). Вызов любого из трёх без constraints не решает, если у людей, которых он спланировал бы, есть описания: он отвечает — обычным ответом, не ошибкой — этими описаниями (для управляющего — сотрудников магазина, никогда не другого управляющего и не его собственным; для владельца — всех), описанием магазина и коротким отпечатком, и агент вызывает снова с прочитанными ограничениями или с пустым списком вместе с этим отпечатком, если ничто в них не ограничивает, когда или где кто-то работает (на список без отпечатка снова приходят описания — на пустой с 20 октября, на любой с 30 октября 2026, решение владельца в тот же день: в следующем сообщении агент перепечатал ограничения по памяти; проверено через инструменты на демо-магазинах, не проверено с локальным Agentfy, не развёрнуто). Каждый раз, когда неделя строится или перестраивается, агент начинает с описаний, а не с ограничений из прежнего сообщения. Агенту больше не нужно сначала звать store_people, и ему сказано никогда не спрашивать, учитывать ли описания. Карточка затем перечисляет ограничения и тех, чьи описания ничего не дали, или говорит «Descriptions read: nothing in them limits when or where people work, or how many the store needs».

Собственные правила магазина (с 20 октября 2026, решение владельца в тот же день; проверено через настоящий /mcp с Agentfy в памяти, один раз проверено с локальным Agentfy, не развёрнуто). Тот же список constraints принимает правила из описания магазина, без человека: minStaff (люди на кассе, в зале или где угодно в данные часы), maxTills (кассы магазина) и extraStaff (люди сверх того, что нужно иначе). Одного описания магазина достаточно, чтобы инструменты отдали описания. Солвер взвешивает эти правила как кассы и сообщает, чего не хватает, с причиной (staffShort); карточка перечисляет их первыми, отдельно от правил людей. То, что уже есть в данных магазина, — часы работы, загруженное время без числа людей, форма смены — агент предлагает через edit_store, set_hourly_load или manage_templates. Что делает каждый вид — на странице Агент и солвер.

Должности (с 30 октября 2026, по просьбе владельца; проверено через настоящий /mcp с Agentfy в памяти, с локальным Agentfy не сверено, не развёрнуто). Должности свободным текстом больше нет: инструменты отдают должность каждого человека из собственного списка команды, а edit_person, invite_employee, invite_manager и invite_people принимают должность по названию, без учёта регистра. Название, которого нет среди действующих должностей команды, отклоняется вместе с названиями, которыми оно могло быть, архивная должность тоже отклоняется; список принадлежит владельцу, ведётся в приложении, и ни один инструмент его не пополняет. Без constraints три инструмента солвера также отдают описания должностей спланированных людей — каждую должность один раз, с теми, у кого она есть, — и то, что такое описание прямо говорит, верно для каждого из них. Описания инструментов приходят с MCP-сервера, поэтому профили агентов не менялись.

Сначала описания (с 5 ноября 2026, по просьбе владельца в тот день; проверено через настоящий /mcp на Agentfy в памяти, с живым агентом не проверено, не развёрнуто). Неделя строится по описаниям, поэтому solve_week сначала проверяет, что они есть: у магазина, у должности каждого, кого он запланировал бы, и у каждого из этих людей. Пока какого-то нет, он ничего не планирует и карточки не делает; он отвечает, чего не хватает, — магазин, должности с их людьми, люди по именам — и какие описания есть. Ассистенту сказано прямо об этом сказать («у магазина нет описания», «нет описания у: Виктор, Сергей»), одним сообщением спросить то, что нужно неделе, — сколько людей на кассе и в зале и когда; обычные смены и рабочие дни должности; выходные человека, самое раннее начало и самый поздний конец — и так же спросить, если описание есть, но этого в нём нет. Ответ записывается до того, как строится неделя: карточка для магазина (edit_store), для человека (edit_person) или, у владельца, для должности (edit_position) — слова человека добавляются к тому, что было, и никогда его не заменяют; управляющий магазина должность менять не может, поэтому ассистент говорит, что её описание добавляет владелец в People → Positions. Когда карточки подтверждены, он строит неделю с начала. Выход: только когда человек прямо говорит строить без этих сведений, ассистент вызывает инструмент снова с withoutDescriptions — отпечатком только что полученного списка; вызов без него или с отпечатком списка, который с тех пор изменился, снова получает вопрос, — и тогда результат и первое предупреждение карточки называют, чего не было («Built without descriptions, as you asked — missing: …»). Shiffty не слышит, что сказал человек, поэтому флаг доказывает только то, что ассистент видел список; что он спросил — правило профиля. Достаточно ли сказано в имеющемся описании, решает ассистент: инструмент проверяет только, что описание есть. create_week не планирует, поэтому не спрашивает; evaluate_request и decide_request тоже не спрашивают, так что запрос никогда не задерживается из-за недостающего описания. Оба профиля получили новую ревизию (магазинов 15, владельца 11).

Правила из описаний хранятся рядом с ними (с 10 ноября 2026, по просьбе владельца в тот день; проверено через инструменты на магазине, созданном тестом, и на копии локальных данных владельца со скриптом вместо ассистента, с живым агентом не проверено, не развёрнуто). Три инструмента солвера вызываются без constraints: они планируют с правилами, сохранёнными для описаний. Пока у какого-то описания нет свежих — ещё не прочитано или изменилось с тех пор, — они отвечают needsRules только с такими описаниями, не больше 20, каждое с текстом и отпечатком; ассистент читает их, сохраняет их правила через save_rules пачками до 20 и вызывает снова. Правила никогда не перепечатываются, изменённое описание читается заново, а приложение показывает правила под каждым описанием. Переданные вручную constraints остаются как замена на один вызов. Оба профиля перешли на новую ревизию (магазинов — 19, владельца — 15). Что хранится и почему — на странице Агент и солвер.

Что создано: шаг 3 ​

Создано 19 октября 2026, не развёрнуто, на правах, которые владелец дал управляющим в тот же день: в своём магазине и только для сотрудников — никогда для другого управляющего и никогда для себя — управляющий деактивирует и снова активирует людей, назначает им другого управляющего магазина, приглашает сотрудников и отзывает эти приглашения, меняет описание и часы работы магазина. Каждое из этих действий — предложение, как на шаге 2: инструмент пробует изменение тем же кодом, что и приложение, ничего не записывает и показывает карточку, которую управляющий подтверждает.

ИнструментДля когоУровеньЧто предлагает
deactivate_personУправляющийproposeСделать сотрудника магазина неактивным; карточка перечисляет смены после сегодняшнего дня, которые уходят вместе с ним. Отклоняется, пока по одной из них открыт запрос на изменение
reactivate_personУправляющийproposeСнова сделать активным неактивного сотрудника магазина
change_managerУправляющийproposeДругого управляющего того же магазина для сотрудника
edit_personУправляющийproposeДолжность — действующая из списка команды, по названию — и часы по договору своих людей, описание любого сотрудника магазина
invite_employeeУправляющийproposeНового сотрудника магазина, по имени и почте, подчинённого этому управляющему, если не назван другой управляющий магазина
withdraw_invitationУправляющийproposeОткрытое приглашение приглашённого сотрудника; приглашение управляющего остаётся за владельцем
edit_storeУправляющийproposeЧасы работы и описание магазина; часы, при которых смены оказались бы вне их, отклоняются ещё до карточки
invite_peopleУправляющийproposeНесколько новых сотрудников магазина одной карточкой (до 50), каждый по имени и почте; если хоть один человек отклонён, отклоняется вся карточка, с его именем. С 23 октября 2026
  • Ссылка приглашения показывается один раз. Ничего не отправляется и никто не создаётся, пока управляющий не подтвердит. Тогда человек получает письмо, а карточка один раз показывает ссылку, с кнопкой «Копировать ссылку», чтобы передать её, если письмо не дойдёт. Shiffty хранит только отпечаток ссылки, как для приглашения, сделанного в приложении; карточка копии не хранит, поэтому после перезагрузки карточка показана как отправленная, без ссылки. Ассистент ссылку никогда не видит.
  • Устарело — отклоняется. Подтверждение снова проверяет всё по правилам на тот момент; если человек или магазин изменились после создания карточки, карточка отклоняется и ничего не меняется.
  • Кто это сделал. Каждое подтверждённое изменение записывается с именем управляющего и пометкой «через ассистента», так же как изменение, сделанное вручную в приложении, записывается с пометкой «в приложении».

Что создано: инструменты владельца ​

Создано 20 октября 2026 (решение владельца в тот же день), проверено через настоящий /mcp на Agentfy в памяти и один раз сверено с локальным Agentfy, не развёрнуто. У ассистента владельца есть инструменты управляющего с правами владельца, для любого магазина компании, и несколько своих. Инструмент магазина принимает storeId; если в компании больше одного магазина и он не указан, ответ перечисляет магазины. Агент магазина никогда не видит storeId и этих инструментов: он обнаруживает ровно то же, что и раньше.

ИнструментУровеньЧто делает для владельца
list_storesreadМагазины компании: часы работы, часовой пояс, статус, управляющие, статус ассистента магазина, часы этой недели
company_overviewreadКаждый активный магазин, эта и следующая неделя: черновик или опубликована, смены и часы, кассо-часы, где не хватает кассиров, отрезки без дежурного управляющего, запросы на изменение, открытые по неделе, и те, что ждут владельца
store_weekreadНеделя одного магазина сеткой — team_week владельца; team_week управляющего остаётся без изменений
day_view, month_sheet, duty_gaps, person_week, store_info, store_peoplereadКак для управляющего, для любого магазина; люди — с описанием каждого
requests_to_decide, request_detail, evaluate_requestreadЗапросы, по которым решает владелец (собственные запросы управляющих); evaluate_request принимает те же ограничения из описаний, что и solve_week, так что подмена, которую он называет, их соблюдает
create_week, change_week, manage_templates, set_hourly_load, set_receipts_per_cashierproposeКак для управляющего, для любого магазина; change_week может менять и строки управляющих
edit_storeproposeТакже название и адрес магазина, а с 23 октября 2026 его часовой пояс (смены сохраняют своё время по часам) и статус: деактивация магазина выводит из работы его ассистента, а повторная активация ассистента не возвращает
create_storeproposeС 23 октября 2026: новый магазин одной карточкой — название, адрес, часы работы, часовой пояс (если не указан — пояс других магазинов компании), описание, чеки на кассира в час и по желанию почасовая нагрузка и шаблоны смен. Карточка перечисляет все значения, так что выбранное ассистентом видно до подтверждения. Подтверждение создаёт магазин по тем же правилам, что и приложение (название другого магазина отклоняется, в приложении тоже), и затем подключает его ассистента; следующие вызовы инструментов находят магазин в list_stores и сразу работают с ним
solve_weekproposeСолвер планирует каждую строку с правами владельца, строки управляющих тоже, и принимает ограничения людей, прочитанные в их описаниях (Агент и солвер) — и управляющих, раз владелец планирует их строки; собственный план управляющего игнорирует ограничение по строке управляющего и называет причину
decide_requestproposeОдобрение или отклонение владельцем запроса управляющего
save_rulesdirectС 10 ноября 2026: правила, прочитанные в любом описании компании, в том числе должности (их управляющий сохранить не может)
deactivate_person, reactivate_person, change_manager, edit_person, invite_employee, withdraw_invitationproposeДля любого человека компании — управляющих тоже, и приглашения управляющего
edit_positionproposeС 5 ноября 2026: описание должности, одно во всех магазинах, карточкой; карточка предупреждает, если новый текст теряет прежний, а описание, изменённое в приложении после карточки, отклоняется как устаревшее. Переименование и архив остаются в People → Positions
create_positionproposeС 11 ноября 2026: новая должность в каталоге компании — название и, по желанию, описание — карточкой, так что новую компанию без должностей можно настроить в чате. Название, которое у компании уже есть, отклоняется (архивное тоже: его восстанавливают в People → Positions); подтверждение создаёт должность по тем же правилам, что и приложение, а название, занятое после карточки, отклоняется. После подтверждения invite_people, invite_employee, invite_manager и edit_person дают её по названию в том же разговоре
invite_managerproposeНового управляющего магазина, по имени и почте; ссылка показывается один раз в приложении
invite_peopleproposeС 23 октября 2026: несколько человек в один магазин одной карточкой, управляющих и сотрудников; сотрудник может подчиняться управляющему, приглашённому в той же карточке. Письма уходят только после подтверждения карточки, ссылки показываются один раз. Ассистент спрашивает настоящие имена и почту и никогда не придумывает адрес; выдуманные демо-люди — только если владелец сам их попросит
publish_weekproposeПубликует черновую неделю, как только владелец подтвердит карточку; карточка перечисляет, что уходит, и предупреждает о нехватке касс, часах без дежурного управляющего и открытых запросах. Неделя, изменённая после создания карточки, отклоняется как устаревшая
  • Решает предметная область, как в приложении. Управляющего, у которого ещё есть подчинённые, нельзя деактивировать, пока у этих людей нет другого управляющего; инструмент так и говорит и карточку не создаёт.
  • Что владелец может в приложении, а ассистент пока нет (23 октября 2026; создание магазина, его часовой пояс и статус были в этом списке до того дня): отменить решение; изменить порядок магазинов; переименовать должность или отправить её в архив; сама компания, её участники, ключи API и передача владения; подключение ассистентов и вывод их из работы (деактивация магазина через edit_store выводит из работы его ассистента). На такую просьбу ассистент отвечает, что не может этого сделать, и говорит, где это делается в Shiffty.
  • Ассистент называет продукт Shiffty (23 октября 2026), никогда — платформу, на которой работает.

Ответы и должности через чат ​

Создано 11 ноября 2026, проверено через настоящий /mcp на Agentfy в памяти, с живым агентом не проверено, не развёрнуто. До того ассистент читал «Ждёт вас» и говорил ответить в приложении, а ассистент владельца отправлял новую компанию без должностей в People → Positions.

ИнструментДля когоУровеньЧто предлагает
answer_colleagueСотрудник, управляющийpropose«Да» или «нет» на просьбу коллеги подменить или поменяться сменой — один пункт «Ждёт вас» по его id; карточка показывает просьбу так же, как приложение, с предупреждением о переработке, если согласие к ней приведёт. Заметки нет: в приложении ответ тоже только «да» или «нет»
confirm_weekСотрудник, управляющийproposeПодтверждение своих смен опубликованной недели или отметка, что в неделе что-то не так; карточка перечисляет смены
  • Только собственные пункты человека. Чужой пункт не находится, а у владельца, у которого нет «Ждёт вас», нет ни одного из этих инструментов.
  • Тот же ответ, что и кнопки приложения. Подтверждение делает то же, что «Согласиться», «Нет» и «Подтвердить» в приложении, с теми же проверками на тот момент: пункт, на который тем временем ответили в приложении, или запрос, который коллега отозвал или который уже решён, отклоняет карточку, и ничего не меняется. Карточка недели отклоняется и тогда, когда смены человека на этой неделе изменились после неё.
  • Должности — это create_position и edit_position владельца, выше.

Обмен с названным коллегой и даты ​

Создано 11 ноября 2026, проверено через настоящий /mcp на Agentfy в памяти, с живым агентом не проверено, не развёрнуто. В тот день демонстрация дважды сорвалась: сотрудник просил поменять субботу с названным коллегой, а ассистент предложил только первую подходящую смену коллеги, ошибся в дне недели, к следующему сообщению потерял id смены, обратился к инструменту управляющего и попросил у человека «employment ID». В тот же день ассистент управляющего на вопрос про «пятницу, 20 ноября» подставил 2024 год, получил пустой день и сказал, что неделя не опубликована.

  • find_cover перечисляет все подходящие смены коллеги, а не только первую, и не предлагает смену, по которой уже есть открытый запрос. У каждой даты есть день недели (day, например «Mon 16 Nov»). Так же и у дат в my_shifts, check_change, request_status, request_detail и waiting_for_me; ответы самого приложения не изменились.
  • Изменение можно назвать так, как его говорит человек. check_change, explain_refusal и submit_change_request принимают смену человека по дате, коллегу по имени и, для обмена, смену коллеги по дате. API само находит смены и человека; если имя или дата не подходят никому или подходят нескольким, оно отказывает и перечисляет варианты, чтобы ассистент спросил человека. Карточка хранит найденные смены, и её подтверждение, как и раньше, заново проверяет правила.
  • Сотруднику говорят, чем пользоваться вместо инструмента управляющего. Раньше store_people отвечал ассистенту сотрудника «the conversation permission is missing», и ассистент пересказывал это как проблему с правами.
  • Дату примерно в полугоде и дальше от сегодняшнего дня отклоняет любой инструмент обоих ассистентов. Отказ называет сегодняшнюю дату в часовом поясе магазина и тот же день и месяц в ближайшем году («did you mean 2026-11-20?»), чтобы ассистент спросил снова, а не отвечал по пустому дню. Передать ассистенту сегодняшнюю дату напрямую нельзя: чат передаёт ему только права человека. Ассистенту владельца, у которого нет магазина, дата даётся по UTC.
  • Всё это написано в инструкциях ассистента магазина (ревизия профиля 21). Инструкции ассистента владельца не изменились.

План: шаг 4 ​

План, не создано. Он сохраняет правила выше и добавляет свои инструменты через те же карточки предложений.

  • Шаг 4 — остальные собственные действия человека. Отозвать мой запрос; виды запросов, которые допускает смена. Отзыв — собственный ответ человека, поэтому direct, после «да» в разговоре. Ответ на просьбу коллеги и подтверждение моей недели были в этом списке; с 11 ноября 2026 они созданы — карточками, а не direct (просьба владельца в тот день: каждое изменение в чате — карточка, которую человек подтверждает), см. Ответы через чат.

Одобрение и отклонение пришли с инструментами солвера, выше. Отмена решения и публикация недели остаются действиями людей.

Каждое действие в приложении и его инструмент ​

Что API позволяет делать человеку и как до этого дотягивается ассистент. «Пока не для агента» называет причину.

В приложенииИнструментКогда
Смотреть мои сменыmy_shiftsСоздано (шаг 1)
Смотреть недели магазина, неделю, текущую неделюteam_week, person_week, duty_gapsСоздано (шаг 1)
Смотреть день с покрытиемday_viewСоздано (шаг 1)
Смотреть лист месяцаmonth_sheetСоздано (шаг 1)
Создать неделю, пустую или скопированнуюcreate_weekСоздано (шаг 2)
Добавить, изменить, удалить смену; проверить сменуchange_week со списком операций; проверка выполняется внутри негоСоздано (шаг 2)
Построить неделю солверомsolve_week → карточка, запись в черновикСоздано (солвер)
Опубликовать неделюТолько для владельца: publish_week → карточка, владелец публикует, подтверждая (владелец, 20 октября 2026); никогда для ассистента управляющегоСоздано (владелец)
Смотреть магазин, его почасовую нагрузку, его шаблоныstore_infoСоздано (шаг 1)
Изменить почасовую нагрузку и чеки на кассираset_hourly_load, set_receipts_per_cashierСоздано (шаг 2)
Добавить, изменить, переупорядочить, удалить шаблоны сменmanage_templatesСоздано (шаг 2)
Изменить часы работы и описание магазинаинструмент propose (edit_store); управляющему можно с 19 октября 2026Создано (шаг 3)
Изменить название и адрес магазинаДля владельца: edit_storeСоздано (владелец)
Изменить пояс или статус магазинаДля владельца: edit_storeСоздано (владелец, 23 октября 2026)
Список всех магазинов, компания одним взглядомlist_stores, company_overview (владелец)Создано (владелец)
Создать магазинДля владельца: create_store, с часами, поясом, описанием, нагрузкой и шаблонами одной карточкойСоздано (владелец, 23 октября 2026)
Подключить ассистента магазинаНе для агента: он не может подключить сам себя—
Смотреть людей магазина, одного человекаstore_people, person_weekСоздано (шаг 1)
Изменить должность человека, часы по договору, описаниеинструмент propose (edit_person), в пределах прав управляющегоСоздано (шаг 3)
Деактивировать или снова активировать сотрудника, сменить его управляющегоинструменты propose (deactivate_person, reactivate_person, change_manager); управляющему можно с 19 октября 2026, для сотрудников магазинаСоздано (шаг 3)
Пригласить сотрудника, отозвать это приглашениеинструменты propose (invite_employee, withdraw_invitation); управляющему можно с 19 октября 2026Создано (шаг 3)
Пригласить управляющего, отозвать приглашение управляющегоinvite_manager, withdraw_invitation (владелец)Создано (владелец)
Пригласить сразу несколько человекinvite_people (владелец; управляющий — для сотрудников магазина)Создано (23 октября 2026)
Создать должность, изменить её описаниеВладельца: create_position, edit_position → карточкаСоздано (5 и 11 ноября 2026)
Проверить изменение, найти замену, объяснить отказcheck_change, find_cover, explain_refusalСоздано
Подать запросcheck_change → карточка или submit_change_request после «да»Создано
Виды запросов, которые допускает сменаЧастично: check_change и find_cover отвечают по одному изменению за раз; инструмент, перечисляющий вариантыШаг 4
Смотреть мои запросыrequest_status, request_detailСоздано (шаг 1)
Отозвать мой запросинструмент directШаг 4
Смотреть запросы на решение, один из нихrequests_to_decide, request_detailСоздано (шаг 1)
Взвесить запросevaluate_requestСоздано (солвер)
Одобрить, отклонитьdecide_request → карточка; решает подтверждениеСоздано (солвер)
Отменить решениеНе для агента: остаётся действием человека—
Смотреть «Ждёт вас» и счётчикиwaiting_for_meСоздано (шаг 1)
Ответить коллеге, подтвердить мою неделюanswer_colleague, confirm_week → карточка; подтверждение отвечаетСоздано (11 ноября 2026)
Войти, выйти, сбросить пароль, узнать, кто яНе для агента: входит сам человек; разговор уже знает, кто он—
Компания, её участники, ключи API, передача владенияПока не для агента: владелец делает это в приложении—
Settings (администраторы платформы)Не для агента—
Чат, его история, подтверждение или сохранение карточкиСам чат, а не инструмент—

Что читать дальше ​