Skip to content

Message Types

OACP defines 12 message types that cover task coordination, code review, handoffs, and open-ended collaboration. Every message must include a type field set to one of the values below.

For the full message schema and field reference, see Message Schema.


Assign a unit of work to another agent.

PropertyValue
DirectionAny agent to any agent
Expected responseRecipient acknowledges with a notification (status update) or begins work
PriorityTypically P1 or P2

Body: Free-form description of the task. Include enough context for the recipient to begin work without follow-up questions.

type: task_request
subject: "Implement rate limiting middleware"
body: |
Add rate limiting to the /api/v1/* routes.
Requirements:
- Token bucket algorithm, 100 req/min per API key
- Return 429 with Retry-After header
- Add unit tests

Request information or a decision from another agent.

PropertyValue
DirectionAny agent to any agent
Expected responseRecipient replies with a notification containing the answer
PriorityVaries; P1 if blocking current work

Body: Free-form. State the question clearly and provide relevant context.

type: question
subject: "Auth strategy for service-to-service calls"
body: |
Should we use mTLS or signed JWTs for internal service auth?
Context: 3 services, all in the same VPC, latency-sensitive.

Send a non-actionable status update or informational message.

PropertyValue
DirectionAny agent to any agent
Expected responseNone required — notifications are FYI
PriorityTypically P2 or P3

Body: Free-form. Describe what happened or changed.

type: notification
subject: "CI pipeline green on feat/auth"
body: |
All 142 tests pass. Build artifact published to staging.
Ready for review when you are.

Track deferred work or risk items that need future attention.

PropertyValue
DirectionAny agent to any agent (often self-addressed)
Expected responseOwner picks up the item according to its risk tier
PriorityDerived from risk_tier

Body schema (required fields):

FieldTypeDescription
source_typestringWhere this follow-up originated: review, task, deploy, incident, or other
source_refstringReference to the originating artifact (PR number, message ID, file path)
risk_tierstringRisk classification: P2 or P3
summarystringBrief description of the deferred item
next_actionstringConcrete next step to resolve it
ownerstringAgent responsible for follow-through

Optional fields: tracking_issue, due_hint.

type: follow_up
subject: "Deferred: input validation on /upload endpoint"
body:
source_type: review
source_ref: "PR #42"
risk_tier: P3
summary: "File upload endpoint accepts any MIME type"
next_action: "Add allowlist for MIME types, write test"
owner: claude
tracking_issue: "#56"
due_hint: "next sprint"

Transfer ownership of a task or context to another agent.

PropertyValue
DirectionCurrent owner to new owner
Expected responseRecipient replies with handoff_complete when done
PriorityTypically P1

Body schema (required fields):

FieldTypeDescription
source_agentstringAgent transferring ownership
target_agentstringAgent receiving ownership
intentstringWhat the recipient should accomplish
artifacts_to_reviewlistFiles, PRs, or documents to examine (non-empty)
definition_of_donelistCriteria for completion (non-empty)
context_bundle.files_touchedlistFiles modified during this work (non-empty)
context_bundle.decisions_madelistKey decisions with rationale (non-empty)
context_bundle.blockers_hitlistBlockers encountered and resolutions (non-empty)
context_bundle.suggested_next_stepslistRecommended actions for the recipient (non-empty)
type: handoff
subject: "Handoff: auth middleware to codex for review"
body:
source_agent: claude
target_agent: codex
intent: "Review and merge the auth middleware PR"
artifacts_to_review:
- "PR #42"
- "src/middleware/auth.ts"
- "tests/middleware/auth.test.ts"
definition_of_done:
- "All review findings addressed"
- "PR merged to main"
context_bundle:
files_touched:
- "src/middleware/auth.ts"
- "src/middleware/index.ts"
- "tests/middleware/auth.test.ts"
decisions_made:
- "RS256 over HS256 for key rotation support"
- "Token expiry check before signature verification for fast-path rejection"
blockers_hit:
- "Key rotation endpoint not documented — inferred from source code"
suggested_next_steps:
- "Review token refresh flow edge cases"
- "Add integration test for key rotation scenario"

Confirm that a handoff has been fully processed.

PropertyValue
DirectionHandoff recipient back to original sender
Expected responseNone — this closes the handoff loop
PrioritySame as the originating handoff

Body schema (required fields):

FieldTypeDescription
issuestringRelated issue number or URL
prstringPull request number or URL
branchstringBranch name
tests_runbooleanWhether tests were executed
next_ownerstringWho owns the work going forward
type: handoff_complete
subject: "Handoff complete: auth middleware merged"
body:
issue: "#38"
pr: "#42"
branch: feat/auth-middleware
tests_run: true
next_owner: claude

The review types form a lifecycle: review_request -> review_feedback -> review_addressed -> review_lgtm.

Request a code review from another agent.

PropertyValue
DirectionAuthor to reviewer
Expected responsereview_feedback with findings
PriorityTypically P1

Body schema:

FieldTypeRequiredDescription
prstringYesPR number or URL
branchstringYesBranch name
diff_summarystringYesHigh-level summary of the changes
max_turns_reviewerintegerNoMaximum review rounds before escalation
max_runtime_s_reviewerintegerNoTime budget in seconds for the reviewer
type: review_request
subject: "Review: rate limiting middleware"
body:
pr: "#55"
branch: feat/rate-limit
diff_summary: |
Adds token bucket rate limiter to API routes.
3 new files, 1 modified. 280 lines added.
max_turns_reviewer: 3
max_runtime_s_reviewer: 600

Return review findings to the PR author.

PropertyValue
DirectionReviewer to author
Expected responsereview_addressed with fixes, or question for clarification
PrioritySame as the originating review_request

Body schema:

FieldTypeRequiredDescription
findings_packetstringYesPath or reference to the findings packet file
roundintegerYesReview round number (starts at 1)
blocking_countintegerYesNumber of findings that block merge
type: review_feedback
subject: "Review feedback: rate limiting (round 1)"
body:
findings_packet: packets/review/pr-55-round-1.yaml
round: 1
blocking_count: 2

Notify the reviewer that feedback has been addressed.

PropertyValue
DirectionAuthor to reviewer
Expected responseAnother review_feedback or review_lgtm
PrioritySame as the originating review_request

Body schema:

FieldTypeRequiredDescription
commit_shastringYesSHA of the commit that addresses the findings
changes_summarystringYesWhat was changed in response to feedback
roundintegerYesReview round being addressed
touched_fileslistYesFiles modified to address findings
addressed_finding_idslistYesIDs of findings that were resolved
type: review_addressed
subject: "Addressed review feedback (round 1)"
body:
commit_sha: "a1b2c3d"
changes_summary: |
Fixed race condition in token bucket reset.
Added mutex around counter increment.
round: 1
touched_files:
- src/middleware/rate-limit.ts
- tests/middleware/rate-limit.test.ts
addressed_finding_ids:
- finding-001
- finding-002

Approve the PR and signal merge readiness.

PropertyValue
DirectionReviewer to author
Expected responseAuthor merges the PR
PrioritySame as the originating review_request

Body schema:

FieldTypeRequiredDescription
quality_gate_resultstringYespass or fail
merge_readybooleanYesWhether the PR is cleared to merge
nitslistNoNon-blocking style or preference notes
type: review_lgtm
subject: "LGTM: rate limiting middleware"
body:
quality_gate_result: pass
merge_ready: true
nits:
- "Consider renaming `rl` to `rateLimiter` for readability"

Initiate open-ended research or exploration.

PropertyValue
DirectionAny agent to any agent
Expected responsenotification with research findings, or brainstorm_followup to narrow scope
PriorityTypically P2 or P3

Body: Free-form. Describe the problem space, constraints, and what kind of output is expected.

type: brainstorm_request
subject: "Research: caching strategies for the query layer"
body: |
We need to reduce P99 latency on the /search endpoint from 800ms to under 200ms.
Constraints:
- Must work with our existing PostgreSQL backend
- Budget for one additional service (Redis, Memcached, etc.)
Please research options and recommend an approach with tradeoffs.

Amend or narrow the scope of an active brainstorm.

PropertyValue
DirectionOriginal requester to brainstorm agent
Expected responseUpdated research findings via notification
PrioritySame as the originating brainstorm_request

Body: Free-form. Provide additional constraints, redirect focus, or ask for deeper analysis on a specific option.

type: brainstorm_followup
subject: "Narrowing: focus on Redis with read-through cache"
body: |
Your Redis recommendation looks promising. Please go deeper on:
- Read-through vs write-behind for our write patterns
- Cache invalidation strategy for real-time consistency
- Memory sizing estimates for 10M cached queries

TypePurposeResponse Type
task_requestAssign worknotification
questionRequest info/decisionnotification
notificationFYI updateNone
follow_upTrack deferred workVaries
handoffTransfer ownershiphandoff_complete
handoff_completeConfirm handoff doneNone
review_requestRequest code reviewreview_feedback
review_feedbackReturn findingsreview_addressed
review_addressedFeedback addressedreview_feedback or review_lgtm
review_lgtmApprove PRAuthor merges
brainstorm_requestOpen-ended researchnotification or brainstorm_followup
brainstorm_followupAmend brainstorm scopenotification