Skip to main content
Glama
systempromptio

SystemPrompt Coding Agent

Official
task-management.md8.2 kB
# Task Management ## Overview Task Management is the core system that tracks, persists, and manages all AI agent tasks within the SystemPrompt Coding Agent. It provides a centralized store for task state, logging, and lifecycle management. ## Architecture ``` TaskStore │ ┌───────────────┼───────────────┐ │ │ │ State Persistence Events Resource Updates │ │ │ File System EventEmitter MCP Notifications ``` ## Core Components ### 1. **TaskStore (Singleton)** The central repository for all task data. **Key Features:** - In-memory task storage with Map - Automatic persistence to disk - Event emission for state changes - Resource update notifications - Metrics calculation ### 2. **Task Data Structure** Tasks are strongly-typed entities representing work units. ```typescript interface Task { id: TaskId; // Branded string type description: string; // Human-readable description status: TaskStatus; // Current state tool: AITool; // AI agent type (CLAUDECODE) created_at: string; // ISO timestamp updated_at: string; // Last modification started_at?: string; // Execution start completed_at?: string; // Completion time assigned_to?: string; // Agent assignment error?: string; // Error message if failed result?: unknown; // Task output logs: TaskLogEntry[]; // Structured logs } ``` ### 3. **Task Status Lifecycle** ``` pending → in_progress → completed_active → completed ↘ ↗ → failed/cancelled ``` **Status Definitions:** - **pending** - Task created but not started - **in_progress** - Task actively being worked on - **completed_active** - Task done but session still active - **completed** - Task done and session terminated - **failed** - Task failed with error - **cancelled** - Task manually cancelled ### 4. **Task Logging System** Structured logging with rich metadata: ```typescript interface TaskLogEntry { timestamp: string; level: 'debug' | 'info' | 'warn' | 'error'; type: 'system' | 'agent' | 'tool' | 'output' | 'progress'; prefix?: string; message: string; metadata?: { source?: string; toolName?: string; toolInput?: any; toolOutput?: any; fileName?: string; lineNumber?: number; duration?: number; error?: any; }; } ``` ## API Methods ### Task Creation ```typescript async createTask(params: { description: string; tool: AITool; instructions?: string; metadata?: Record<string, unknown>; }): Promise<Task> ``` Creates a new task with auto-generated ID and timestamps. ### Task Updates ```typescript async updateTask( id: string, updates: UpdateTaskParams ): Promise<Task | null> ``` Updates task properties and emits change events. ### Task Retrieval ```typescript async getTask(id: string): Promise<Task | null> async getTasks(filter?: TaskFilter): Promise<Task[]> async getTasksByStatus(status: TaskStatus): Promise<Task[]> ``` ### Task Logging ```typescript async addLog( taskId: string, message: string, level?: LogLevel, metadata?: any ): Promise<void> ``` Appends structured log entries to tasks. ### Task Completion ```typescript async completeTask( id: string, result?: unknown ): Promise<Task | null> ``` Marks task as completed with optional result. ## State Persistence Tasks are automatically persisted to disk: ### Storage Location ``` .systemprompt/ ├── state/ │ ├── state.json # Application state │ └── tasks/ # Individual task files │ ├── task_123.json │ └── task_456.json ``` ### Persistence Strategy 1. **Auto-save** on task creation/update 2. **Individual files** per task for reliability 3. **JSON format** for human readability 4. **Atomic writes** to prevent corruption ### State Recovery On startup: 1. Load all task files from disk 2. Rebuild in-memory Map 3. Validate task data 4. Emit loaded events ## Events The TaskStore emits typed events: ### task:created ```typescript { task: Task } ``` ### task:updated ```typescript { taskId: string; updates: UpdateTaskParams; task: Task; } ``` ### task:log:added ```typescript { taskId: string; entry: TaskLogEntry; } ``` ### task:completed ```typescript { task: Task } ``` ## Task Filtering Query tasks with flexible filters: ```typescript interface TaskFilter { status?: TaskStatus | TaskStatus[]; tool?: AITool | AITool[]; assignedTo?: string; createdAfter?: string; createdBefore?: string; search?: string; } ``` Example: ```typescript const activeTasks = await taskStore.getTasks({ status: ['pending', 'in_progress'], tool: 'CLAUDECODE', createdAfter: '2024-01-01' }); ``` ## Metrics and Analytics The TaskStore provides real-time metrics: ```typescript interface TaskStats { total: number; byStatus: Record<TaskStatus, number>; byTool: Record<AITool, number>; averageDuration: number; successRate: number; } ``` Access via: ```typescript const metrics = await taskStore.getMetrics(); ``` ## Integration with Other Systems ### 1. **Agent Manager Integration** - Tasks linked to agent sessions via `assigned_to` - Status updates from agent lifecycle - Log streaming from agent output ### 2. **MCP Resource Integration** - Tasks exposed as resources (`task://{id}`) - Real-time updates via notifications - Resource list changes on task CRUD ### 3. **Event System Integration** - Claude events logged to tasks - Tool usage tracked in metadata - Progress events update task logs ## Best Practices ### 1. **Task Creation** - Provide clear, concise descriptions - Include detailed instructions for agents - Set appropriate metadata for tracking - Use structured logging from the start ### 2. **Status Management** - Update status immediately on state change - Use `completed_active` for post-processing - Always set error message on failure - Include timestamps for all transitions ### 3. **Logging** - Use appropriate log levels - Include rich metadata for tools - Keep messages concise but informative - Log both successes and failures ### 4. **Error Handling** - Catch and log all exceptions - Set task to failed state on errors - Include stack traces in metadata - Provide recovery suggestions ## Usage Examples ### Creating and Running a Task ```typescript const taskStore = TaskStore.getInstance(); // Create task const task = await taskStore.createTask({ description: "Implement user authentication", tool: "CLAUDECODE", instructions: "Add JWT-based auth with login/logout" }); // Update when agent starts await taskStore.updateTask(task.id, { status: "in_progress", started_at: new Date().toISOString(), assigned_to: agentSession.id }); // Log progress await taskStore.addLog( task.id, "Created auth middleware", "info", { fileName: "auth.js" } ); // Complete task await taskStore.completeTask(task.id, { filesCreated: ["auth.js", "auth.test.js"], testsPass: true }); ``` ### Monitoring Active Tasks ```typescript // Listen for updates taskStore.on('task:updated', ({ task }) => { console.log(`Task ${task.id}: ${task.status}`); }); // Query active tasks const active = await taskStore.getTasks({ status: ['in_progress', 'completed_active'] }); // Get task with full details const task = await taskStore.getTask(taskId); console.log(`Logs: ${task.logs.length}`); console.log(`Duration: ${task.duration}ms`); ``` ## Performance Considerations 1. **Memory Management** - Tasks stored in memory for fast access - Consider archiving old tasks - Monitor Map size for large deployments 2. **Persistence Optimization** - Batch writes when possible - Use debouncing for frequent updates - Consider async persistence queue 3. **Query Performance** - Index tasks by common fields - Implement caching for filters - Paginate large result sets

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systempromptio/systemprompt-code-orchestrator'

If you have feedback or need assistance with the MCP directory API, please join our Discord server