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 Method | Example |
|---|---|
| Branch name | Branch pip-123-fix-login → links to Linear issue PIP-123 |
| PR description | PR body mentions PIP-456 → links to that Linear issue |
| Code generation | Themis generates code for ENG-789 → links the PR back to the issue |
| URL scanning | Activity 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:
| Tab | Shows | Statuses |
|---|---|---|
| Focus | Work that needs your attention now | Open, In Review |
| Later | Work in progress, not blocking | In Progress |
| Done | Completed or closed work | Done, 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:
| Event | Derived Status |
|---|---|
| PR opened / ready for review | In Review |
| PR review submitted | In Review |
| Code pushed | In Progress |
| Linear issue moved to “In Progress” | In Progress |
| PR merged | Done |
| Linear issue moved to “Done” | Done |
| PR closed without merge | Closed |
| Sentry issue resolved | Done |
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:
| Role | How You Get It |
|---|---|
| Owner | You created the task from chat (create_task) |
| Author | You opened the PR or created the issue |
| Assignee | The PR or issue is assigned to you |
| Reviewer | You’re requested as a reviewer |
| Mentioned | You’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:
| Tool | What 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-descriptionorfeat/eng-456-featureso 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.