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 (адміністратори платформи)Не для агента—
Чат, його історія, підтвердження чи збереження карткиСам чат, а не інструмент—

Куди далі ​