Tasks
Most action items get lost the moment the meeting ends. GrooveOS turns them into a real, assignable task list — without anyone re-typing them. When someone says "I'll send the deck by Friday" in a chat, a meeting, or an agent run, a task appears in your team's task list with the title, the assignee, and the due date already filled in.
What tasks are
A task is a first-class GrooveOS entity, on the same footing as memory items and contacts. It has a title, a status (todo, in progress, done, cancelled), an optional assignee, an optional due date, and a source — where it came from.
Like everything in GrooveOS, tasks are team-scoped. Your team's task list cannot leak into another team's.
Opening your team's task list
Sign in at grooveos.app/account/teams/, open your team card, and click Tasks. The page lives at:
https://grooveos.app/account/teams/tasks/?team=<your-team-slug>
You'll see four columns — todo, in progress, done, cancelled — populated with every active task in your team. Filter by assignee, project, due date, or source.
Where your tasks come from
Three feeds populate your task list automatically:
| Source | Trigger | How tasks appear |
|---|---|---|
| Granola meetings | A meeting ends and the note is processed. | Each detected action item becomes a task, with assignee and due date pulled from the note when possible. |
| Agent runs | An agent (e.g. @meeting-recap) finishes a run that yields TODOs. |
Each TODO becomes a task. The task is linked back to the agent run for traceability. |
| LibreChat / Open WebUI chats | Opt-in: when your team admin enables chat-based task detection. | The system watches outgoing messages for action intent ("I'll handle X tomorrow") and creates a task. See below. |
| Manual | You click New task on the dashboard, or call the API. | You type the title, optionally set assignee + due date, and save. |
Task fields
| Field | Description |
|---|---|
title |
Short description of the task. Required. |
status |
todo (default), in_progress, done, or cancelled. |
assignee |
A team member, or empty for "anyone on the team". Assignees must belong to the same team. |
due_date |
Optional ISO 8601 date. |
project_scope |
Optional — group tasks by project. Empty means team-wide. |
source |
Where the task originated: manual, granola:<note-id>, agent:<run-id>, or chat:<message-id>. |
created_by |
The user who created it. Empty for system-generated tasks (meetings, chat detection). |
Working with tasks
From the dashboard you can:
- Drag a task between columns to change its status.
- Click a task to expand it — edit title, due date, assignee, or attach notes.
- Filter by assignee ("just mine"), by project, or by source ("just from meetings").
- Mark done — the task moves to the done column and stays visible for 30 days, then archives.
Status changes generate a separate audit entry — task.status_changed
— so you can later answer "who marked the deck task as done?".
Chat-based task detection (opt-in)
If your team admin enables chat-based task detection, GrooveOS watches every outgoing message in LibreChat and Open WebUI for action intent. Sentences like "I'll handle the deployment tomorrow" or "someone needs to review the contract" produce a new task automatically.
Off by default
Chat detection is disabled out of the box — we don't want to fill your task list with unintended TODOs. Enable it from your team's integration settings when you're ready. Turn it off any time; existing chat-detected tasks remain.
Detected tasks are tagged with source=chat:<message-id> and
created_by=NULL (no human created them). Filter the dashboard by
that source if you want to review just chat-detected ones.
FAQ
Can I assign a task to someone outside my team?
No. The assignee must be a team member. If you try to assign a non-member you get an error from the API and a red toast on the dashboard.
What happens to a task when the source memory item is deleted?
The task stays. The link to the source is broken (you'll see "source no longer available" in the task detail). This is intentional — once a task exists, it's its own thing.
Can I sync tasks to Linear / Asana / Jira?
Not natively in v1. The Tasks API exposes the standard CRUD endpoints, so a sync script is easy to write. Native bridges are on the roadmap.
Can I subscribe to "new task" notifications?
Email notifications for tasks assigned to you ship in v1.5. Webhooks for
arbitrary task events are on the roadmap. For now, the API supports
?since=<timestamp> polling — see the
API Reference.
What's next
- Meetings (Granola) — How meeting action items become tasks.
- Agents — Agents that generate tasks (e.g.
@meeting-recap). - Brain Monitor — See tasks alongside memory items, contacts, and conversations in one feed.
- API Reference — Programmatic CRUD on tasks.