Tasks

Tasks unify work across GitHub, Linear, and Sentry into a single view. Instead of tracking a pull request in GitHub, the related issue in Linear, and error alerts in Sentry separately, Themis connects them automatically and shows one coherent task in your inbox.

You can also create personal tasks directly from chat — durable commitments the agent tracks for you, alongside webhook-derived tasks in the same inbox. See Personal tasks from chat.

How Unification Works

When Themis receives a webhook event (PR opened, issue updated, Sentry alert), it computes a task key — a unique identifier like github:owner/repo:pr:42 or linear:ENG-123. If events from different channels share a connection, they’re merged into one task.

Cross-Channel Detection

Themis finds connections between channels automatically:

Detection MethodExample
Branch nameBranch pip-123-fix-login → links to Linear issue PIP-123
PR descriptionPR body mentions PIP-456 → links to that Linear issue
Code generationThemis generates code for ENG-789 → links the PR back to the issue
URL scanningActivity text contains github.com/owner/repo/pull/42 → links to that PR

When a connection is found, the activities merge into a single task. If two separate tasks are later discovered to be related, they’re automatically merged — activities, participants, and inbox entries all consolidate.

Your Task Inbox

Tasks appear under the Tasks tab in your inbox, organized into three views:

TabShowsStatuses
FocusWork that needs your attention nowOpen, In Review
LaterWork in progress, not blockingIn Progress
DoneCompleted or closed workDone, Closed

What You See on Each Task

  • Status badge — color-coded: gray (open), gold (in progress/review), green (done)
  • Title — derived from the most relevant activity (Linear issue title preferred, then PR title)
  • Source badges — clickable links to GitHub, Linear, and/or Sentry
  • Contributors — avatars of everyone involved, with their role
  • AI summary — 1-2 sentence summary of what’s happening, auto-generated and refreshed as new activity arrives
  • Activity timeline — chronological feed of all events across all channels

Task Detail

Click a task to see the full detail panel:

  • Status dropdown — change status manually or let it auto-track
  • Action buttons — jump directly to the PR, Linear issue, or related chat
  • AI summary — auto-refreshes when stale; click Refresh to regenerate manually
  • Originating chats — conversations where this task was discussed
  • Activity timeline — every event from every channel, with source indicators

Task Status

Statuses are automatically derived from the latest activity:

EventDerived Status
PR opened / ready for reviewIn Review
PR review submittedIn Review
Code pushedIn Progress
Linear issue moved to “In Progress”In Progress
PR mergedDone
Linear issue moved to “Done”Done
PR closed without mergeClosed
Sentry issue resolvedDone

Manual Override

Click the status dropdown on any task to set it manually. Once overridden, automatic status tracking pauses for that task. Click the reset icon next to the status to return to auto-tracking.

Your Role on Tasks

You appear on tasks based on your involvement:

RoleHow You Get It
OwnerYou created the task from chat (create_task)
AuthorYou opened the PR or created the issue
AssigneeThe PR or issue is assigned to you
ReviewerYou’re requested as a reviewer
MentionedYou’re @mentioned in a comment

Each role creates an inbox entry so the task appears in your personal task list. You’ll only see tasks where you have a role — not every task in the space.

AI Summaries

Each task gets an auto-generated summary that captures what the work is, its current status, and what happened recently. Summaries:

  • Auto-refresh when new activity arrives (debounced to avoid excessive regeneration)
  • Use specific details — PR numbers, issue IDs, and contributor names
  • Stay concise — 1-2 sentences maximum
  • Can be manually refreshed by clicking the Refresh button on the summary card

Personal tasks from chat

In addition to webhook-derived tasks, you can ask the agent to create and manage personal tasks for you directly from chat. Personal tasks are durable commitments — todos, follow-ups, reminders — that live in the same inbox as your webhook-derived tasks but are owned by you and managed through conversation.

Creating a task

Just tell the agent what to track:

“Remind me to draft the auth refactor spec by Friday”

The agent calls create_task(title: "Draft auth refactor spec", due_date: "2026-04-30") and the task immediately appears under your Tasks tab. The originating conversation is linked as the task’s source so you can jump back to it anytime.

The agent is instructed not to create a task for transient questions, one-off actions, or work that already lives as a Linear issue / GitHub PR / Sentry alert (those flow in via webhooks). Use create_task for things you want to come back to.

Referencing tasks by ID

Every task has a numeric id rendered as a small #1278 chip next to the title in the inbox. Paste the id back into chat to reference it:

“What’s the status on #1278?” “Mark #1278 as done” “Set the due date on #1278 to next Tuesday”

The agent uses these tools under the hood:

ToolWhat it does
create_task(title:, summary?, status?, due_date?)Creates a personal task owned by you
list_my_tasks(status?, overdue?, origin?, limit?)Lists tasks you own
get_task(id:)Read-only detail lookup; visible to any participant on the task (owner, author, assignee, reviewer, mentioned)
update_task(id:, title?, summary?, status?, due_date?)Updates a task you own; pass status: "auto" to clear a manual override
complete_task(id:)Marks a task you own as done
delete_task(id:)Destroys a task you own (the agent will confirm first)

Permissions

  • Read — anyone with a participant role on the task (owner, author, assignee, reviewer, mentioned) can ask the agent to look it up by id. Matches what you can see in your inbox.
  • Write — only the owner can update / complete / delete. The agent refuses if you don’t own the task and suggests an alternative (e.g. comment on the Linear issue instead).
  • Cross-space — tasks are space-scoped. The agent in space A cannot read or modify a task in space B.

Status, due dates, and overrides

Setting a status from chat (e.g. “mark #1278 as in progress”) flips the task to manually overridden — webhook activity won’t silently change it back. To return to auto-tracking, ask the agent to “clear the status on #1278” (it will pass status: "auto").

Due dates render in both the sidebar and detail page. Overdue tasks pick up a red overdue badge next to the date.

Audit trail

Every change you make to a personal task — title, summary, status, status override, due date — is recorded in the task’s timeline alongside any webhook activity, with the user who made the change and a human description like “Marked as done” or “Due date set to May 1”. Look at the timeline on the task detail page to see what happened and when.

Enabling / disabling

Personal tasks are controlled by the Tasks feature toggle on the space (default: on). When disabled, the chat tools disappear and the guidance prompt section isn’t injected. Per-space, in Settings → Features.

Tips

Webhook tasks are automatic; personal tasks are explicit. GitHub, Linear, and Sentry tasks appear in your inbox without you doing anything. Personal tasks only exist when you ask the agent to track something.

Cross-channel linking works best with consistent branch naming. Use branch names like pip-123-description or feat/eng-456-feature so Themis can match branches to Linear issues automatically.

Use Focus/Later/Done as a lightweight task board. Focus shows what needs attention now, Later shows background work, Done is your completed archive.