Shared protocols for domain agents — blocker handling, git coordination, escalation, and task completion. Read this before starting any task.
Read this before starting any task. These protocols apply to all domain agents: backend-dev, frontend-dev, database-dev, deployment-dev, reviewer, and uat-tester.
The shared task list is the single source of truth for who's working on what. Use TaskList to see all tasks. Use TaskGet and TaskUpdate to manage your own.
Before you touch ANY code, you MUST claim your task:
TaskUpdate: taskId=<id>, status="in_progress", owner="<your-agent-name>"
| Status | Meaning | Who sets it |
|---|---|---|
pending | Available, not started | Lead (at creation) |
in_progress | Being worked on — check owner before touching | Agent claiming it |
completed | Done, review passed, merged | Agent (after review passes) |
TaskList before starting ANY work. If a task is in_progress with another agent's name, DO NOT work on it or any files it covers.status: "in_progress" and owner: "<your-name>" as your FIRST action on any task. If you can't claim it (already in_progress), message the lead.[REVIEW REQUESTED] and message the reviewer (or lead):
TaskUpdate: taskId=<id>, description="[REVIEW REQUESTED] <original description>"
completed until the reviewer sends a PASS verdict. The lifecycle is:
pending → in_progress (you claim it)
→ [REVIEW REQUESTED] (code done, pushed, awaiting review)
→ reviewer finds BLOCKER → you fix → [REVIEW REQUESTED] again
→ reviewer PASS → completed
TaskList to find your next available task (pending, no owner, not blocked).The lead creates tasks, sets dependencies (addBlockedBy), and assigns initial owners. But agents must still verify ownership before starting — the lead may reassign tasks between when you last checked and when you start.
If you discover another agent has committed to files in YOUR claimed task's scope:
git pull to see their changesThis is the #1 rule. Violating it can destroy other agents' work or the user's in-progress changes.
git checkout -- or git restore to discard changes. These commands destroy uncommitted work. If you see unrelated changes in the working tree, flag them to the lead — don't remove them. (This is enforced by a hook — the command will be blocked.)Why: Uncommitted deletions and discarded changes are invisible to other agents and the lead. If you delete a file or discard changes another agent or the user depends on, there's no commit to revert — the work is just gone.
What to do instead:
Message to lead: "FU-3 replaces PendingActionsPanel with ApprovalInlineMessage.
Old files that may be removable: webApp/src/components/features/Confirmations/.
Flagging for cleanup — not deleting."
/compact before continuing.You can message teammates directly for cross-domain coordination. Use SendMessage with recipient set to their name.
Handle peer-to-peer (don't escalate):
{shape}" → message backend-devEscalate to the lead when:
Communication style:
foos, FK column is foo_id UUID, index on (user_id, created_at)" beats three separate questions.POST /api/foos so I can type the React Query hook."in_progress. No one else should be editing it.git pull or check git log --oneline -3 before starting — the team lead or a prior agent may have committed ahead of you.main, never force-pushEvery implementation task starts with a survey phase. You must check existing primitives before creating anything new. Skip this only for pure bug fixes on existing code.
Read .claude/skills/product-architecture/SKILL.md — the "Platform Primitives" section.
If what you're building matches a row in that table, use the existing primitive.
Decision shortcuts:
jobs table.agent_schedules.NotificationService.update_instructions tool or memory.pending_actions + approval tiers.external_api_connections + OAuth flow.# Services
grep -r "class.*Service" chatServer/services/ | grep -i "<your-domain>"
# Tools
grep -r "class.*Tool" chatServer/tools/ | grep -i "<your-verb>"
# Tables
grep "CREATE TABLE" supabase/schema.sql | grep -i "<your-entity>"
# Handlers
grep -r "async def handle_" chatServer/services/job_handlers.py
Your first commit message on any task must include a survey line:
Survey: checked jobs table, NotificationService, existing handlers — no overlap.