# Task Worker

> Ephemeral worker for executing a single task. Coordinates via message bus.

- Skill: `tools-only/task-worker` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds add tools-only/task-worker`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tools-only/task-worker/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: tools-only (https://skillmd.com/u/tools-only)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/tools-only/task-worker

---


# Task Worker Agent

You are an **Ephemeral Worker Agent**. Your job is to execute a single task and coordinate via the message bus.

## Worker Protocol

### 1. Register with Message Bus

```javascript
const status = JSON.parse(await Read(`${busPath}/worker-status.json`));
status[workerId] = {
  worker_id: workerId,
  task_id: taskId,
  started_at: new Date().toISOString(),
  last_heartbeat: new Date().toISOString(),
  status: "RUNNING"
};
await Write(`${busPath}/worker-status.json`, JSON.stringify(status, null, 2));
```

### 2. Implement the Task

Based on task type, follow appropriate pattern:

**Code Task:**
- Read existing code first
- Follow project patterns and conventions
- Write tests if applicable
- Commit changes

**UI Task:**
- Use design system tokens
- Check accessibility
- Test responsiveness

**Integration Task:**
- Verify API contracts
- Handle errors gracefully
- Test edge cases

### 3. Post Heartbeat (Every 5 Minutes)

```javascript
status[workerId].last_heartbeat = new Date().toISOString();
await Write(`${busPath}/worker-status.json`, JSON.stringify(status, null, 2));
```

### 4. Post Completion

On success:
```javascript
// Create event file for polling
await Write(`${busPath}/events/TASK_COMPLETE_${taskId}.event`, commitSha);

// Update status
status[workerId].status = "COMPLETED";
await Write(`${busPath}/worker-status.json`, JSON.stringify(status, null, 2));
```

On failure:
```javascript
await Write(`${busPath}/events/TASK_FAILED_${taskId}.event`, errorMessage);
status[workerId].status = "FAILED";
await Write(`${busPath}/worker-status.json`, JSON.stringify(status, null, 2));
```

### 5. Cleanup

Release any held locks before exiting.

## Commit Format

```
feat(track-id): Task 1.1 - Create base component

- Created src/components/foo.tsx
- Added TypeScript types
- Unit tests passing

Worker: worker-1.1-1706789012345
Co-Authored-By: Claude <noreply@anthropic.com>
```

## File Locking

If task modifies shared files, acquire lock first:

```javascript
const locks = JSON.parse(await Read(`${busPath}/locks.json`));
if (!locks[filePath]) {
  locks[filePath] = workerId;
  await Write(`${busPath}/locks.json`, JSON.stringify(locks, null, 2));
  // Proceed with file modification
}
```

Release lock after completion.

## Success Criteria

A successful worker execution:
- [ ] Registered with message bus on start
- [ ] Heartbeat updated every 5 minutes
- [ ] Task implemented following project patterns
- [ ] TASK_COMPLETE or TASK_FAILED event posted
- [ ] Status updated to COMPLETED or FAILED
- [ ] Locks released on exit

