diff --git a/server/tm/README.md b/server/tm/README.md
new file mode 100644
index 0000000..6b6e62d
--- /dev/null
+++ b/server/tm/README.md
@@ -0,0 +1,76 @@
+# Task Management (tm) Package
+
+The `tm` package provides a comprehensive task management system with support for task dependencies, ownership, and various task states.
+
+## Overview
+
+This package defines interfaces and types for managing tasks in a system where:
+- Each task has a single owner
+- Tasks can be in various states (todo, in progress, completed, etc.)
+- Tasks have priorities and due dates
+
+## Core Components
+
+### Types (`types.go`)
+
+- **Task**: The main task entity with all task properties
+- **TaskStatus**: Enum for task states (pending, in progress, completed, etc.)
+- **TaskPriority**: Enum for task priorities (low, medium, high, urgent)
+- **Owner**: Represents a task owner
+
+- **TaskFilter**: For filtering task queries
+- **Request/Response types**: For API operations
+
+### Interfaces (`interface.go`)
+
+#### TaskManager
+The main interface for task management operations:
+- CRUD operations for tasks
+- Task status management (start, complete)
+- Task queries and filtering
+- Task archiving
+
+### Errors (`errors.go`)
+
+Comprehensive error definitions:
+- Common task management errors
+- Task-specific errors with context
+
+## Key Features
+
+### Task States
+- **To Do**: Task is created but not started
+- **In Progress**: Task is currently being worked on
+- **Completed**: Task is finished
+- **Archived**: Task is archived (soft delete)
+
+### Task Priorities
+- **Low**: Low priority tasks
+- **Medium**: Normal priority tasks
+- **High**: High priority tasks
+
+### Filtering and Queries
+- Filter by owner, status, priority
+- Filter by date ranges
+- Pagination support
+
+## Usage Example
+
+```go
+// Create a task manager implementation
+var taskManager tm.TaskManager
+
+// Create a new task
+task, err := taskManager.CreateTask(ctx, &tm.TaskCreateRequest{
+    Title:       "Implement user authentication",
+    Description: "Add login and registration functionality",
+    OwnerID:     "user123",
+    Priority:    tm.PriorityHigh,
+})
+
+// Start a task
+task, err = taskManager.StartTask(ctx, "task1")
+
+// Complete a task
+task, err = taskManager.CompleteTask(ctx, "task1")
+```
diff --git a/server/tm/errors.go b/server/tm/errors.go
new file mode 100644
index 0000000..55dd037
--- /dev/null
+++ b/server/tm/errors.go
@@ -0,0 +1,47 @@
+package tm
+
+import (
+	"errors"
+	"fmt"
+)
+
+// Common task management errors
+var (
+	ErrTaskNotFound         = errors.New("task not found")
+	ErrOwnerNotFound        = errors.New("owner not found")
+	ErrInvalidTaskStatus    = errors.New("invalid task status")
+	ErrInvalidTaskPriority  = errors.New("invalid task priority")
+	ErrTaskAlreadyCompleted = errors.New("task is already completed")
+	ErrTaskAlreadyArchived  = errors.New("task is already archived")
+	ErrTaskNotStarted       = errors.New("task is not started")
+	ErrTaskNotInProgress    = errors.New("task is not in progress")
+	ErrInvalidOwner         = errors.New("invalid owner")
+	ErrInvalidTaskData      = errors.New("invalid task data")
+)
+
+// TaskError represents a task-specific error with additional context
+type TaskError struct {
+	TaskID string
+	Op     string
+	Err    error
+}
+
+func (e *TaskError) Error() string {
+	if e.TaskID != "" {
+		return fmt.Sprintf("task %s: %s: %v", e.TaskID, e.Op, e.Err)
+	}
+	return fmt.Sprintf("%s: %v", e.Op, e.Err)
+}
+
+func (e *TaskError) Unwrap() error {
+	return e.Err
+}
+
+// NewTaskError creates a new TaskError
+func NewTaskError(taskID, op string, err error) *TaskError {
+	return &TaskError{
+		TaskID: taskID,
+		Op:     op,
+		Err:    err,
+	}
+}
diff --git a/server/tm/interface.go b/server/tm/interface.go
new file mode 100644
index 0000000..93b0f29
--- /dev/null
+++ b/server/tm/interface.go
@@ -0,0 +1,24 @@
+package tm
+
+import (
+	"context"
+)
+
+// TaskManager defines the interface for task management operations
+type TaskManager interface {
+	// Task operations
+	CreateTask(ctx context.Context, req *TaskCreateRequest) (*Task, error)
+	GetTask(ctx context.Context, id string) (*Task, error)
+	UpdateTask(ctx context.Context, id string, req *TaskUpdateRequest) (*Task, error)
+	ArchiveTask(ctx context.Context, id string) error
+	ListTasks(ctx context.Context, filter *TaskFilter, page, pageSize int) (*TaskList, error)
+
+	// Task status operations
+	StartTask(ctx context.Context, id string) (*Task, error)
+	CompleteTask(ctx context.Context, id string) (*Task, error)
+
+	// Task queries
+	GetTasksByOwner(ctx context.Context, ownerID string, page, pageSize int) (*TaskList, error)
+	GetTasksByStatus(ctx context.Context, status TaskStatus, page, pageSize int) (*TaskList, error)
+	GetTasksByPriority(ctx context.Context, priority TaskPriority, page, pageSize int) (*TaskList, error)
+}
diff --git a/server/tm/types.go b/server/tm/types.go
new file mode 100644
index 0000000..781d63d
--- /dev/null
+++ b/server/tm/types.go
@@ -0,0 +1,84 @@
+package tm
+
+import (
+	"time"
+)
+
+// TaskStatus represents the current status of a task
+type TaskStatus string
+
+const (
+	StatusToDo       TaskStatus = "todo"
+	StatusInProgress TaskStatus = "in_progress"
+	StatusCompleted  TaskStatus = "completed"
+	StatusArchived   TaskStatus = "archived"
+)
+
+// TaskPriority represents the priority level of a task
+type TaskPriority string
+
+const (
+	PriorityLow    TaskPriority = "low"
+	PriorityMedium TaskPriority = "medium"
+	PriorityHigh   TaskPriority = "high"
+)
+
+// Owner represents a task owner
+type Owner struct {
+	ID   string `json:"id"`
+	Name string `json:"name"`
+}
+
+// Task represents a single task in the system
+type Task struct {
+	ID          string       `json:"id"`
+	Title       string       `json:"title"`
+	Description string       `json:"description"`
+	Owner       Owner        `json:"owner"`
+	Status      TaskStatus   `json:"status"`
+	Priority    TaskPriority `json:"priority"`
+	CreatedAt   time.Time    `json:"created_at"`
+	UpdatedAt   time.Time    `json:"updated_at"`
+	DueDate     *time.Time   `json:"due_date,omitempty"`
+	CompletedAt *time.Time   `json:"completed_at,omitempty"`
+	ArchivedAt  *time.Time   `json:"archived_at,omitempty"`
+}
+
+// TaskFilter represents filters for querying tasks
+type TaskFilter struct {
+	OwnerID       *string       `json:"owner_id,omitempty"`
+	Status        *TaskStatus   `json:"status,omitempty"`
+	Priority      *TaskPriority `json:"priority,omitempty"`
+	DueBefore     *time.Time    `json:"due_before,omitempty"`
+	DueAfter      *time.Time    `json:"due_after,omitempty"`
+	CreatedAfter  *time.Time    `json:"created_after,omitempty"`
+	CreatedBefore *time.Time    `json:"created_before,omitempty"`
+}
+
+// TaskCreateRequest represents the data needed to create a new task
+type TaskCreateRequest struct {
+	Title       string       `json:"title" validate:"required"`
+	Description string       `json:"description"`
+	OwnerID     string       `json:"owner_id" validate:"required"`
+	Priority    TaskPriority `json:"priority"`
+	DueDate     *time.Time   `json:"due_date,omitempty"`
+}
+
+// TaskUpdateRequest represents the data needed to update an existing task
+type TaskUpdateRequest struct {
+	Title       *string       `json:"title,omitempty"`
+	Description *string       `json:"description,omitempty"`
+	OwnerID     *string       `json:"owner_id,omitempty"`
+	Status      *TaskStatus   `json:"status,omitempty"`
+	Priority    *TaskPriority `json:"priority,omitempty"`
+	DueDate     *time.Time    `json:"due_date,omitempty"`
+}
+
+// TaskList represents a paginated list of tasks
+type TaskList struct {
+	Tasks      []*Task `json:"tasks"`
+	TotalCount int     `json:"total_count"`
+	Page       int     `json:"page"`
+	PageSize   int     `json:"page_size"`
+	HasMore    bool    `json:"has_more"`
+}
