Task Management
Otto's core experience revolves around tasks. You describe what you need done in plain language, Otto works on it in the background, and you get notified when results are ready. This page covers th...
Otto's core experience revolves around tasks. You describe what you need done in plain language, Otto works on it in the background, and you get notified when results are ready. This page covers the full task lifecycle from creation through completion.
Creating Tasks
Web UI
The main screen presents a text area with the prompt "Describe a task for Otto to work on..." Type your request in natural language and click Submit Task or press Enter. Otto immediately creates the task, adds it to your task list, and begins working on it asynchronously via a background worker queue.
Examples of task descriptions:
- "Write a quarterly sales summary based on the attached spreadsheet"
- "Research competitors in the Nordic fintech market and compile a report"
- "Draft an email to the engineering team about the upcoming migration"
Slack
Mention Otto in any channel it has been invited to:
Otto replies in a thread with progress updates and delivers the result when finished. You can also DM Otto directly. See Slack Integration for full setup and usage details.
Otto can monitor an inbox via IMAP. Emails with the subject line "New Task" are automatically converted into tasks. See Email Integration for setup details.
Webhooks
External systems can create tasks by posting JSON to POST /webhook/{webhook_type}. Otto supports typed webhooks for GitHub, Stripe, Twilio, and Slack, as well as a generic catch-all type. Webhooks are queued and processed asynchronously. See Webhook Integration for details.
Task Lifecycle and Statuses
Every task moves through a defined set of statuses:
| Status | Meaning |
|---|---|
| Pending | Task created, queued for processing |
| Running | Otto is actively working on the task |
| Waiting Input | Otto has paused and needs a human response |
| Waiting Subagents | Otto dispatched subtasks and is waiting for them to finish |
| Completed | Task finished successfully with a result |
| Failed | Task encountered an unrecoverable error |
| Archived | Task moved to the archive by a user |
Tasks progress from pending to running automatically. The waiting states occur when Otto needs external input or is coordinating parallel work. Terminal states are completed, failed, and archived.
Task List and Real-Time Updates
The main page has three tabs: Tasks, Messages, and Archive.
Each task card in the list displays:
- Title and description snippet
- Creator name and creation date
- Assignee (if applicable)
- Status badge with color coding
- Progress bar (0-100%)
Tasks in the "Waiting Input" state are highlighted in orange, and a banner appears at the top: "Otto needs your input on some tasks."
Polling. The page polls the backend every 5 seconds for status updates. Polling pauses automatically when the browser tab is not visible and resumes when you return, so it does not waste resources in the background.
Result Preview. Completed tasks show a "View Result" button that opens a slide-out panel on the right side of the screen. The panel renders the full markdown result with copy and download options, and includes a "View Full Details" link to the task detail page.
Task Detail View
Click any task card to open its detail page. The page has up to three tabs depending on the task's state.
Process Tab
A chronological log of every step Otto took while working on the task. Each entry is typed and iconified:
- AI -- Otto's reasoning and decisions
- Plan -- Planning steps the agent laid out
- Tool -- Tool calls Otto made (file reads, web searches, email sends, etc.)
- Human -- Interactions with people
Long entries are collapsible. A sidebar shows full task metadata including the original request text and timestamps.
Result Tab
Appears when Otto produces output. The result is rendered as markdown with syntax highlighting, tables, and code blocks. Two export options are available:
- Copy -- copies the result to your clipboard
- Download -- export as Markdown (.md) or Plain Text (.txt)
Subagents Tab
Appears when the task spawned subtasks. Shows expandable cards for each subtask with its status, agent type, duration, and rendered output. See the Subagents documentation for details.
Polling behavior. The detail page polls every 5 seconds while the task is in a non-terminal state (pending, running, waiting). Polling stops automatically once the task reaches completed, failed, or archived.
Deep linking. Tabs and subtask expansions are reflected in URL parameters (?tab=result, ?subtask=<id>), so you can share direct links to specific views.
Human-in-the-Loop
Sometimes Otto needs clarification before it can proceed. When this happens, the task enters the "waiting_input" status and Otto sends you a question.
In the web UI:
- The task card turns orange and a banner appears on the main page.
- Click the waiting task to open the Discussion Modal -- a chat-style interface showing Otto's question.
- Type your response and click Send (or press Enter).
- Otto receives your answer and resumes working from where it left off.
In Slack:
Otto sends you a direct message with the question. Reply to the DM and Otto matches your response to the waiting task and continues.
Otto's ask_human tool supports two modes:
- Wait for answer (default) -- pauses the task until the human responds.
- Notify only -- delivers a message to the human without pausing. Useful for status updates or FYI notifications during a task.
Task Continuation
After a task completes, you can start a follow-up task that builds on the original work.
- Find the completed task in your task list.
- Click the Continue button on the task card.
- Otto redirects you to the home page with the input pre-filled:
Based on task <id>: <description>, ... - Edit or extend the pre-filled text, then submit.
This enables iterative workflows where you refine results across multiple rounds.
Archiving and Deletion
Every task card has a trash icon button with a two-step process:
- First click -- archives the task. It disappears from the active Tasks tab and moves to the Archive tab.
- Second click (from the Archive tab) -- permanently deletes the task.
Archived tasks remain fully accessible in the Archive tab with all their details, results, and logs intact.
File Attachments and Uploads
You can upload files for Otto to work with when creating a task.
Supported File Types
| Category | Extensions |
|---|---|
| Images | png, jpg, jpeg, gif, webp |
| Documents | pdf, docx, pptx, xlsx |
| Text | txt, md, json, csv |
How It Works
- Click the Upload button below the task input area on the main page.
- Select one or more files from your file picker.
- Each file is uploaded to a user-specific sandbox directory on the backend.
- The file path is automatically appended to your task input so Otto knows where to find it.
- Submit the task as usual.
Otto can read uploaded documents (PDFs and Word files are converted to markdown for analysis), process data files, and reference images.
Via Slack: Share files in a DM or @mention with Otto. The files are downloaded to your sandbox and a processing task is created automatically.
Storage quotas. A configurable storage limit (STORAGE_QUOTA_GB environment variable) prevents runaway disk usage. When the quota is exceeded, uploads are rejected with a clear error message. Set to 0 for unlimited storage.
Notifications and Messages
Otto sends in-app notifications to keep you informed about task progress.
The Messages tab on the main page shows all notifications for the current user:
- Unread notifications are highlighted with a blue background and a "New" badge.
- A red dot appears on the Messages tab when you have unread items.
- Clicking a notification marks it as read and navigates to the associated task.
- Each notification can be deleted individually with the trash icon.
Notifications are polled alongside task data every 5 seconds, so you see updates in near-real-time.
If Slack is connected, notifications are also delivered there -- Slack-originated tasks get threaded replies in the original channel, and web-originated tasks trigger DMs.