The Liyagent app for employees

Where the people in your organisation use their agents every day, at /workspace, on desktop and phone, installable as an app, with everything that needs them in one place.

After reading this page you will be able to:
  • Know who lands in the app and who lands on the console
  • Install the app on a computer or a phone
  • Act on what your agents need from you in Needs you
  • Turn on notifications, and set them up on the server

The Liyagent app is for the people in your organisation who use agents rather than run them. It is the workspace at /workspace: it lists the agents a person may talk to, keeps their chats, shows everything their agents are waiting on them for, and has nothing of the admin console in it. It works in any modern browser, and installs as an app on a computer or a phone.

It is not the native Liyagent mobile app, which signs in the same way and has its own notifications (Identity and roles).

Who lands where

After signing in, with a password or with single sign-on:

The person holdsThey land on
Only the Viewer or Analyst role's permissions: the read permissions, agents.run, agents.chat and their own connectionsThe app, /workspace
Any other permission, for example an Operator, Administrator or Owner roleThe admin console, /

Someone who has a console permission can still open /workspace. Their header then shows an Admin console link back. A person without one sees no such link, and / takes them to the app.

The four places

On a wide screen the places are tabs in the header. On a phone they are a bar at the bottom of the screen.

PlaceWhat it shows
HomeA greeting, how many things need you, your agents with prompts to start from, and your recent chats
AgentsThe agents you may talk to and the chat. On a phone, the list first; picking an agent opens its chat, and the arrow goes back to the list
Needs youEverything your agents are waiting on you for, newest first. The tab shows how many
ChatsYour recent chats with every agent. Opening one picks the conversation up where it was left

The address says where you are (/workspace?view=needs, ?view=chats, ?agent=<key>), so a link or the browser's back button takes you there.

Chatting with an agent

  • Your agents: each agent you may chat with, with its picture, its name and one line on what it does. A search box narrows the list. Pipeline and oversight agents, which work on tickets rather than with people, are not listed.
  • Past chats: your own chats with the selected agent, newest first. The × beside a chat deletes it, with its files, after a confirmation.
  • The chat: Enter sends, Shift+Enter adds a line. Answers are shown with their formatting, tables and charts. Under each answer, Helpful and Not helpful send feedback, and Not helpful asks what was wrong.
  • Attachments: the clip button, or dropping files on the chat, adds up to 5 files a message. Images up to 5 MB, documents up to 10 MB.
  • Voice input: where the browser can turn speech into text, a microphone button sits beside the clip. While it listens, the button turns red and a line under the message box says Listening. What you said appears in the message box for you to read and send as if you had typed it. Liyagent receives only the text you send, never audio. Some browsers use their maker's speech service to turn speech into text; where the browser cannot, there is no button.
  • Waiting runs and SAP changes you are asked about in a chat are shown as cards under it, and also in Needs you.

The AI notice

Before a person's first message, the app tells them that Liya is an AI assistant and not a person, that its answers can be wrong, and that it acts only with their own permissions. The message box opens once they choose I understand. A short reminder stays under the message box. This is the information Article 50 of the EU AI Act asks for when people interact with an AI system.

Needs you

Needs you lists everything waiting on you across your agents, newest first, with the agent that asked and what it wants. Each is settled where it is shown:

What waitsShown toWhat you do
Approval: an action an agent was held onPeople who may decide it now: agents.read and agents.approve, an access policy that lets them approve that agent, in the tenant they work inOpen What will be sent to read the action's arguments, then Approve or Reject (with an optional reason)
Answer: a run of yours waiting for something only you can giveThe person who started the runFill in what it asks and choose Send answer (or Accept / Decline for a form a connected system sent)
Connection: a run of yours waiting for you to connect an accountThe person who started the runConnect, then I have connected
SAP · Confirm: an SAP change an agent proposed to youThe person it was proposed toConfirm or Cancel

An approval is left out while its agent's owners still have it to themselves, unless you are one of them, and, with four eyes on (TICKETIQ_APPROVAL_FOUR_EYES=true), when the agent asked for it on your own behalf. A run waiting for an approval is not yours to settle: it waits on an approver, and goes on by itself once the approval is decided.

Each action uses the same route, permission checks and audit as the console: approving here is the same agent.approval.approve row as approving in the Inbox. The list refreshes every 30 seconds while the app is open, and when you come back to it.

On an installed app, the number of things waiting also shows on the app's icon, where the operating system supports it.

Install the app

OnHow
Chrome or Edge on a computer, Chrome on AndroidHome offers Install the Liyagent app. Choose Install, or use the browser's own Install app menu item. × hides the offer on that browser
Safari on an iPhone or iPadHome says how: tap Share, then Add to Home Screen
Other browsersUse the browser's Add to Home Screen or Install menu item, where it has one

The installed app opens at /workspace in a window of its own, with the Liyagent icon. Settings (the gear in the header) says whether you are using the installed app.

The app starts fast because its stylesheets, scripts and icons are kept on the device by a service worker. Only those are kept: never a chat, an answer from an agent, an API response or anything that differs from one person to another. Pages are always fetched from the server first. With no network, the app shows a short You are offline screen with Try again, and nothing you type is sent until you are back online.

Notifications

With notifications on, the app tells you when an agent needs you, even when it is closed:

  • Liya needs your approval: an approval you may decide was raised, or its owners did not respond in time and it is now open to you.
  • Liya needs your answer or Liya needs a connection: one of your runs started waiting for you.

A notification names the agent and nothing else, for example "Helper is waiting for your approval." It never contains what the agent wants to do, its arguments, a ticket or your words, because notifications pass through Google, Mozilla, Microsoft or Apple and show on a lock screen. Opening it takes you to that item in Needs you. Notifications of one agent replace one another, and each expires with the thing it is about.

To turn them on, open Settings in the header and switch on Tell me when an agent needs me. Your browser asks for permission. Send a test notification checks it end to end. On an iPhone or iPad, install the app on the Home Screen first; Safari sends notifications only to installed apps.

  • Notifications are per browser. Turn them on in each browser or phone you want them on.
  • Signing out turns them off in that browser. They also stop when your session ends; the app turns them back on under your next session when you open it.
  • If your browser blocks notifications for the site, allow them in the browser's site settings, then switch them on again.
  • If your organisation has not set notifications up, Settings says so and has no switch.

Set up notifications on the server

Notifications use Web Push with VAPID keys. They are off until both keys are set:

  1. Generate a key pair on any machine with the app installed: python -m ticketiq.webpush generate-keys. It prints the two settings.
  2. Set TICKETIQ_WEBPUSH_VAPID_PUBLIC_KEY and TICKETIQ_WEBPUSH_VAPID_PRIVATE_KEY in the deployment's environment. The private key can instead be a secret reference (secret://label) to a value in the secret store. Never commit either key.
  3. Set TICKETIQ_WEBPUSH_SUBJECT to a contact the push services can use, mailto: or https:. Without it, the instance's public address is used.
  4. Let the server reach the browsers' push services (outbound HTTPS): fcm.googleapis.com, updates.push.services.mozilla.com, *.notify.windows.com and web.push.apple.com. TICKETIQ_WEBPUSH_ENDPOINT_HOSTS lists the push services a browser's subscription may name, and anything else is refused.
  5. Restart. Settings in the app now shows the switch.

Changing the keys makes every existing subscription unusable: each browser is subscribed again under the new key the next time its person opens the app. Removing them turns notifications off and forgets every subscription.

Subscribing, unsubscribing and sending a test are audited as auth.webpush.subscribe, auth.webpush.unsubscribe and auth.webpush.test. Each send is agent.approval.web_push or agent.run.web_push, naming the people and how many browsers were told, never the content. A send a push service refuses is agent.web_push.failed.

Giving someone access

  1. Give the person a role that holds agents.chat. The built-in Viewer and Analyst roles do. See Identity and roles.
  2. Make sure no access policy forbids them to invoke the agent. An agent a policy forbids them is not listed. See Access.
  3. To decide approvals in Needs you, they also need agents.read and agents.approve.

What is kept

A chat in the app is the same governed run as the agent's Playground: the same model binding, guardrails, budget and audit. Each chat is kept as a session of the agent, owned by the person, so they can reopen it. A person sees only their own chats. Administrators with the transcript content permission can review them on the agent's Transcripts tab.

A browser with notifications on is kept as its push service address and the keys the notification is encrypted to, with whose it is and the session it was turned on under. It is forgotten when the person turns notifications off or signs out, when the push service says it is gone, when the session ends, and when the account is deleted.

API

The app uses these routes. Chatting needs agents.chat or agents.operate:

RouteWhat it does
GET /api/agents/chatThe agents the caller may chat with
GET /api/agents/{key}/chatsThe caller's own chats with an agent
GET /api/agents/{key}/chats/{session_id}One of the caller's own chats, with its messages
POST /api/agents/{key}/playgroundSends a message

These are open to anyone signed in, and each answers only for the caller:

RouteWhat it does
GET /api/me/landingWhere the caller lands, and whether the admin console is theirs
GET /api/me/needsEverything waiting on the caller, newest first. Each kind is read only for a caller who holds the permission of the action that settles it
GET /api/me/pushWhether the server sends notifications, its public key, and the caller's own subscribed browsers
POST /api/me/push/subscriptionsTurns notifications on for a browser: its PushSubscription (endpoint, keys.p256dh, keys.auth)
DELETE /api/me/push/subscriptions/{id}Turns them off for one of the caller's browsers
POST /api/me/push/testSends the caller's own browsers a test notification

Approvals, waiting runs and SAP changes are settled with their own routes: POST /api/approvals/{id}/approve and /reject, POST /api/runs/{run_id}/resume, and POST /api/agents/{key}/playground/sap-confirmations/{id}.