Інструменти агента
Прийнятий напрям (власник, 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 власник установив чотири правила для інструментів асистента:
- Агент не схвалює й не відхиляє запити на зміну й не публікує графік — поки що. Пізніше додасться розв'язувач, і з ним агент будуватиме графіки й вирішуватиме щодо запитів. Доти інструментів для цих трьох дій немає взагалі, навіть вимкнених.
- Немає асистента для власника чи для всієї компанії. Один агент на магазин, як і раніше; власник і далі робить свої справи в застосунку. Замінено 20 жовтня 2026: власник отримує асистента з правами власника на всю компанію (нижче).
- Окрім правила 1, забороненого немає. Агент може робити все, що увійшлій людині дозволено робити в застосунку, завжди з правами цієї людини й з перевіркою за тими самими правилами, що й у застосунку. Коли керівникові дозволено щось змінити вручну, асистент може допомогти йому це змінити; коли не дозволено, асистентові теж не можна.
- Інструменти вибирають і пишуть уручну, а не генерують з 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_stores | read | Магазини компанії: години роботи, часовий пояс, статус, керівники, статус асистента магазину, години цього тижня |
company_overview | read | Кожен активний магазин, цей і наступний тиждень: чернетка чи опублікований, зміни й години, касо-години, де бракує касирів, відрізки без чергового керівника, запити на зміну, відкриті щодо тижня, і ті, що чекають на власника |
store_week | read | Тиждень одного магазину сіткою — team_week власника; team_week керівника лишається без змін |
day_view, month_sheet, duty_gaps, person_week, store_info, store_people | read | Як для керівника, для будь-якого магазину; люди — з описом кожного |
requests_to_decide, request_detail, evaluate_request | read | Запити, щодо яких вирішує власник (власні запити керівників); evaluate_request приймає ті самі обмеження з описів, що й solve_week, тож заміна, яку він називає, їх дотримується |
create_week, change_week, manage_templates, set_hourly_load, set_receipts_per_cashier | propose | Як для керівника, для будь-якого магазину; change_week може змінювати й рядки керівників |
edit_store | propose | Також назву й адресу магазину, а з 23 жовтня 2026 його часовий пояс (зміни зберігають свій час за годинником) і статус: деактивація магазину виводить з роботи його асистента, а повторна активація асистента не повертає |
create_store | propose | З 23 жовтня 2026: новий магазин однією карткою — назва, адреса, години роботи, часовий пояс (якщо не вказано — пояс інших магазинів компанії), опис, чеки на касира за годину та за бажанням погодинне навантаження й шаблони змін. Картка перелічує всі значення, тож вибране асистентом видно до підтвердження. Підтвердження створює магазин за тими самими правилами, що й застосунок (назву іншого магазину відхиляють, у застосунку теж), і потім підключає його асистента; наступні виклики інструментів знаходять магазин у list_stores і одразу працюють з ним |
solve_week | propose | Розв'язувач планує кожен рядок із правами власника, рядки керівників теж, і приймає обмеження людей, прочитані в їхніх описах (Агент і розв'язувач) — і керівників, бо власник планує їхні рядки; власний план керівника ігнорує обмеження щодо рядка керівника й називає причину |
decide_request | propose | Схвалення чи відхилення власником запиту керівника |
save_rules | direct | З 10 листопада 2026: правила, прочитані в будь-якому описі компанії, зокрема посади (їх керівник зберегти не може) |
deactivate_person, reactivate_person, change_manager, edit_person, invite_employee, withdraw_invitation | propose | Для будь-кого в компанії — керівників теж, і запрошення керівника |
edit_position | propose | З 5 листопада 2026: опис посади, один у всіх магазинах, карткою; картка попереджає, якщо новий текст губить попередній, а опис, змінений у застосунку після картки, відхиляється як застарілий. Перейменування й архів лишаються в People → Positions |
create_position | propose | З 11 листопада 2026: нова посада в каталозі компанії — назва і, за бажанням, опис — карткою, тож нову компанію без посад можна налаштувати в чаті. Назва, яка в компанії вже є, відхиляється (архівна теж: її відновлюють у People → Positions); підтвердження створює посаду за тими самими правилами, що й застосунок, а назва, зайнята після картки, відхиляється. Після підтвердження invite_people, invite_employee, invite_manager і edit_person дають її за назвою в тій самій розмові |
invite_manager | propose | Нового керівника магазину, за ім'ям і поштою; посилання показується один раз у застосунку |
invite_people | propose | З 23 жовтня 2026: кілька людей до одного магазину однією карткою, керівників і працівників; працівник може підпорядковуватися керівникові, запрошеному в тій самій картці. Листи йдуть лише після підтвердження картки, посилання показуються один раз. Асистент питає справжні імена й пошту і ніколи не вигадує адресу; вигадані демо-люди — лише якщо власник сам їх попросить |
publish_week | propose | Публікує чорновий тиждень, щойно власник підтвердить картку; картка перелічує, що йде, і попереджає про брак кас, години без чергового керівника й відкриті запити. Тиждень, змінений після створення картки, відхиляється як застарілий |
- Вирішує предметна область, як у застосунку. Керівника, у якого ще є підлеглі, не можна деактивувати, доки ці люди не мають іншого керівника; інструмент так і каже й картки не створює.
- Що власник може в застосунку, а асистент поки що ні (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 (адміністратори платформи) | Не для агента | — |
| Чат, його історія, підтвердження чи збереження картки | Сам чат, а не інструмент | — |
Куди далі
- Інтеграція з Agentfy: де працює агент і як дозволяється виклик інструмента.
- Агент і розв'язувач: що будує тиждень і зважує запит.
- Відкриті питання: що вирішено, а що ні.