Start

Getting started

InRoots is one container that listens to the chat your team already uses, parses one line a day per person, and turns it into hours, goals, coaching and an explainable score. This page takes you from nothing to the first check-in.

What you need

  • A Linux host: the installer targets Debian 12 or newer and Ubuntu 22.04 or newer. The product runs as a single Docker image.
  • A chat channel: a Matrix server (K9 Chat is a Matrix client) with a dedicated bot account and its access token, or a Slack workspace, or a Microsoft Teams tenant with an Azure bot registration.
  • A database: SQLite is the default and needs nothing; point the product at Postgres for multi-host deployments.
  • An AI provider key, or a local Ollama for air-gapped installs (with spoken replies off). The score never needs the AI; the assistant, summaries and coaching do.
  • A reverse proxy (Nginx or Caddy) terminating TLS in front of the container.

Install

Copy the release to the host, run the installer as root, edit the environment file it creates, and start the stack.

  • A clean start logs which standup and PTO rooms the bot is listening to and that the front-end build is present.
  • The first admin is the account named in BOOTSTRAP_ADMIN_MATRIX_ID; it is promoted automatically on startup.
  • Schema changes are additive and run on every boot, so upgrades are a pull and a restart.
sudo bash install.sh
sudo nano /opt/inroots/.env
cd /opt/inroots && sudo docker compose up -d
sudo docker compose logs -f

Connect your chat

On Matrix the bot joins the rooms you assign it: a standup room per team, optionally a PTO room, an urgent room and an admin room. Direct messages between the bot and each person are end-to-end encrypted, and a startup audit turns encryption on for any older DM room that lacks it.

  • Slack workspaces are added through an OAuth install; each workspace stores its own bot token, encrypted at rest.
  • Teams tenants register their own Azure bot and paste the credentials; a manifest package is generated for you to upload.
  • Additional bot identities (personas) can be created later and assigned to rooms individually; each one keeps its own encryption keys.
MATRIX_HOMESERVER=https://chat.example.com
MATRIX_USER_ID=@inroots:example.com
MATRIX_ACCESS_TOKEN=...
MATRIX_STANDUP_ROOM_ID=!room:example.com

Sign in to the dashboard

There are no passwords by default. Enter your chat ID on the login page, the bot sends a six-digit code by direct message, and you type it in. Codes expire after five minutes, three wrong attempts lock the account for fifteen minutes, and a trusted-device option skips the code on a device you use regularly.

Configure a team

  • Working days: a seven-day picker per team (a Sunday to Thursday week is fully supported). Unset means every day counts.
  • Sign-in deadline and grace, or the flexible sign-in switch that grades on hours only.
  • Expected hours per day, and per-employee weekly hours for part-timers.
  • A holiday calendar per team, generated offline from a country and region, plus an org-wide list.
  • A manager room for escalations and, if you want them, availability pings.

Choose an AI provider

Open the Providers page, paste a key for any of the sixteen supported providers, and pick the active one. Set an Ollama endpoint instead if standup text must never leave your network. The failover chain and the daily call budget are configured on the same page; see AI providers and AI cost and privacy for the details.

The first check-in

Ask someone to post this in the standup room. The bot acknowledges it in the room, records the sign-in time, extracts the tasks and the blocker, and starts the day.

  • At the end of the day the person posts sign off. Hours are the difference, corrected for what the day actually shows.
  • Anyone can type /pulse me in chat to see their own scorecard from the first week.
Yesterday:
- shipped the export fix
Today:
- invoice PDF rendering
Issues: NPs