Skip to content

Core Concepts

Tasks

A task is the central unit of work. Every task has:

FieldDescription
titleShort description of the work
priorityP0 (critical) → P1P2 (default) → P3 (low)
statusCurrent state in the workflow
assigneeIdWho is responsible for the task
creatorIdWho created the task
tagsFree-form labels, auto-populated by AI
depthPosition in the task tree (0 = root)

Tasks can be nested up to 5 levels deep. Deleting a parent task soft-deletes all its children.


Task Status

Tasks move through a defined set of states:

                    ┌─────────────────────────────┐
                    │                             │
         ┌──────────▼──────────┐                 │
         │        INBOX        │                 │
         └──┬──────┬──────┬────┘                 │
            │      │      │                      │
     accept │      │reject│  clarify             │
            │      │      │                      │
            ▼      ▼      ▼                      │
       ACCEPTED  REJECTED  NEEDS_CLARIFICATION   │
            │      │      │                      │
      start │      │resend│  (reply)             │
            │      └──────┴──────► INBOX         │
            ▼                                    │
       IN_PROGRESS                               │
            │                                    │
       done │                                    │
            ▼                                    │
          DONE ────────────── reopen ────────────┘
TransitionFromToWho
acceptINBOXACCEPTEDAssignee
rejectINBOXREJECTEDAssignee
clarifyINBOXNEEDS_CLARIFICATIONAssignee
startACCEPTEDIN_PROGRESSAssignee
doneIN_PROGRESSDONEAssignee
reopenDONEIN_PROGRESSAssignee or Creator
resendREJECTEDINBOXCreator

Self-assigned tasks (no assigneeId, or assigneeId equals the creator) skip INBOX and start as ACCEPTED automatically.


Teams

Teams group users together. They now have explicit roles, visibility, and join policy.

  • Creating a team auto-joins you as the first OWNER
  • Roles are OWNER, ADMIN, and MEMBER
  • OWNER can manage all roles, delete the team, and must never drop to zero
  • ADMIN can manage join requests, invitations, members, and basic team settings
  • MEMBER can see member-only details but cannot manage the team
  • Teams can be PUBLIC or PRIVATE
  • PUBLIC teams can use AUTO_JOIN; all other team setups require approval
  • Task assignment across teams is not allowed

API Keys

Authentication uses API keys with the prefix doto_. Keys are:

  • Generated as doto_ + 32 random bytes (base62 encoded)
  • Stored as SHA-256 hashes — the raw key is never persisted
  • Limited to 10 active keys per user
  • Revocable at any time

Pass the key in every request:

Authorization: Bearer doto_xxxxxxxx...

AI Classification

When a task is created and an AI provider is configured, Doto automatically:

  1. Generates free-form tags based on the title and description
  2. Suggests a priority level (stored but not auto-applied)

Both are stored in aiClassification on the task. If no AI provider is configured, the task is created normally with empty tags and aiClassification: null.

Supported providers: OpenAI, Anthropic, Google, Groq, Mistral, xAI, and OpenRouter.

Released under the MIT License.