The AI assistant
Ask InRoots a question in plain language and it answers from live data, keeps the thread for follow-ups, and tells you which model answered. The same engine powers the direct-message conversation with the bot.
What it knows
The assistant answers from a snapshot fetched at the moment you ask, scoped to what your role may see. It is told never to claim its data is stale and never to send you to another system: for this data, it is the source.
- Live attendance: who is signed in, late or absent today, and last sign-in and sign-off times.
- Hours today, this week and this month; strikes; active and upcoming leave; team and role.
- PTO requests in every state, approved leave blocks, recent standups, audit-log events and live presence from the chat server.
- Metadata about HR documents, never their contents; nothing from your files, email, screen or source code.
A conversation, not a query box
Each person has a thread. Follow-ups such as "and what about last week?" or "compare her with Omar" are resolved against the previous turns; the last eight are replayed to the model, trimmed to keep cost and latency bounded. The thread persists until you start a new conversation or after 24 hours of inactivity.
- Answers are summary-first: the first sentence is the answer, at most four sentences unless you ask for detail, a table when comparing people or periods, and one note line for caveats.
- Each reply is tagged with the provider and model that produced it. If the active provider fails or times out, the request is retried through the failover chain automatically.
- A model picker lets you route one question to a specific provider and model without changing the active provider; admins can lock it with ai.model_locked.
- Admins can rewrite the system prompt (ai.ask_system_prompt) to change the assistant’s persona and rules.
Who is late today and why? How many hours did Lina do last week versus this week? and Omar?
In chat
The bot answers the same kinds of questions in a direct message. Self-service questions about your own record are answered from a fixed set of query templates: the model only picks the template and its parameters, and the product runs the query itself with your user ID, so no free text ever reaches the database.
- How many hours this week or last week, hours or sign-in or sign-off on a given day, days worked and late this month, leave used, and your last five blockers.
- After a command, the conversation stays open for thirty minutes so you can ask follow-ups or drift to a general question without re-invoking the bot; end it with /end, done or bye.
- Bot personas in shared rooms answer when @-mentioned, in their own identity, using the recent thread as context.
how many hours did I do this week? when did I sign in on Tuesday? /pulse me
Voice
Speech is optional and off by default (voice.enabled). In the dashboard you press, speak and release; the transcript lands in the input and is submitted. In a room, a voice message is only treated as addressed to the bot when it starts with a wake phrase; in a direct message no prefix is needed and a follow-up window keeps listening for a short time.
- Transcription uses a speech model at Groq or OpenAI through the same OpenAI-compatible client as chat completions.
- Spoken replies are off by default; when enabled, text-to-speech runs through OpenAI or ElevenLabs with a hard limit of 1500 seconds of audio per day.
- Voice conversations keep the last 50 turns per admin so the assistant can refer back to earlier questions.
voice.enabled voice.wake_word voice.response_language voice.max_turn_seconds
Privacy
- The question and its data snapshot are sent to the provider you configured, unredacted. Do not paste secrets into the assistant. With a local Ollama nothing leaves the host.
- Conversation history is stored server-side and scoped to the person. Admins see that a question was asked in the audit log (ai_query), not the answer body.
- Employees only get answers about themselves; leads about their reports; managers about their tree; admins about everyone.