Files
oh-my-opencode/src/features/claude-tasks/AGENTS.md
T

2.2 KiB

CLAUDE TASKS KNOWLEDGE BASE

OVERVIEW

Claude Code compatible task schema and storage. Core task management with file-based persistence, atomic writes, and OpenCode todo sync.

STRUCTURE

claude-tasks/
├── types.ts               # Task schema (Zod)
├── types.test.ts          # Schema validation tests
├── storage.ts             # File operations (atomic write, locking)
├── storage.test.ts        # Storage tests (30 tests, 543 lines)
├── session-storage.ts     # Session-scoped task storage
├── session-storage.test.ts
└── index.ts               # Barrel exports

TASK SCHEMA

type TaskStatus = "pending" | "in_progress" | "completed" | "deleted"
interface Task {
  id: string                    // T-{uuid}
  subject: string               // Imperative: "Run tests"
  description: string
  status: TaskStatus
  activeForm?: string           // Present continuous: "Running tests"
  blocks: string[]              // Task IDs this task blocks
  blockedBy: string[]           // Task IDs blocking this task
  owner?: string                // Agent name
  metadata?: Record<string, unknown>
  repoURL?: string
  parentID?: string
  threadID?: string
}

STORAGE UTILITIES

Function Purpose
getTaskDir(config) Task storage directory path
resolveTaskListId(config) Task list ID (env → config → cwd)
readJsonSafe(path, schema) Parse + validate, null on failure
writeJsonAtomic(path, data) Atomic write via temp + rename
acquireLock(dirPath) File lock with 30s stale threshold
generateTaskId() T-{uuid} format
findTaskAcrossSessions(config, taskId) Locate task in any session

TODO SYNC

Automatic bidirectional sync between tasks and OpenCode's todo system.

Task Status Todo Status
pending pending
in_progress in_progress
completed completed
deleted null (removed)

Sync triggers: task_create, task_update.

ANTI-PATTERNS

  • Direct fs operations (use storage utilities)
  • Skipping lock acquisition for writes
  • Using old field names (title → subject, dependsOn → blockedBy)