Tasks

Feature Team & Enterprise 4 min read Updated May 2026

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:

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