The Agent Communication Protocol (ACP) provides a consistent error structure to make error handling easier for both clients and servers.

Error structure

Each error contains:
  • Code: A predefined identifier for programmatic handling
  • Message: A human-readable description for display or logging
Use codes to drive error-handling logic and messages for user display or logging. See the specification for the current set of error codes.

Error handling

Servers can send errors in three ways:
  • HTTP response body (failed requests)
  • Within a failed run
  • As events in a stream error
Clients must monitor all these locations and handle errors appropriately. SDK clients should expose errors in a way that’s natural for the programming language, typically as exceptions:
try:
    run = await client.run_sync(...)
    run.raise_for_status()
except ACPError as e:
    error = e.error
    # Logic that handles the error

Guidance

When handling errors:
  • Use the code for programmatic decisions
  • Use the message for display or logging
  • Tailor your response to your application type
Example: A chat UI should show invalid_input error messages to users, but log server_error messages to the console (since they may be too technical). A CLI would likely display all error messages regardless of code.