a2a-multi-agent/skills/a2a-task-lifecycle/SKILL.md
Implement A2A task lifecycle management — task creation, state transitions, terminal states, history, and artifacts. Use when building task state machines, handling state transitions, or managing task persistence.
npx skillsauth add orcaqubits/agentic-commerce-claude-plugins a2a-task-lifecycleInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Fetch live docs:
https://a2a-protocol.org/latest/specification/ for the Task object schema and state machinesite:github.com a2aproject A2A task lifecycle states for state transition rulessite:github.com a2aproject a2a-samples task for task handling examplesA Task is the central unit of work in A2A. It represents a request from a client agent to a server agent, tracks progress through well-defined states, accumulates messages and artifacts, and reaches a terminal state when complete.
Key fields of a Task object:
state enum and optional messagestateTransitionHistory enabled)| State | Terminal? | Description |
|-------|-----------|-------------|
| submitted | No | Task received, queued for processing |
| working | No | Agent actively processing |
| input-required | No | Agent needs more input (multi-turn) |
| auth-required | No | Authentication needed |
| completed | Yes | Task finished successfully |
| failed | Yes | Task encountered an unrecoverable error |
| canceled | Yes | Task was canceled |
| rejected | Yes | Server refused the task |
| unknown | — | Default/unknown state |
submitted → working
submitted → rejected
submitted → canceled
working → completed
working → failed
working → canceled
working → input-required
input-required → working (when client provides more input)
input-required → canceled
auth-required → working (when auth is provided)
auth-required → canceled
Rules:
completed, failed, canceled, rejected) are final — no transitions outcanceled which client can request)input-required → working happens when the client sends a follow-up messageTasks are created implicitly when a client sends a message without a taskId:
message/send or message/stream without taskIdsubmitted stateworking or return submittedWhen a client sends a message with an existing taskId:
input-required back to workingArtifacts are the outputs of a task:
working stateid, name, optional description, and partsTaskArtifactUpdateEventIf the agent declares stateTransitionHistory: true in its Agent Card:
Fetch the specification for the exact Task object schema, state enum values, and transition validation rules before implementing.
development
Build with Spree's headless Next.js storefront — the official `spree/storefront` repo (Next.js 16 App Router with Server Actions and Turbopack, React 19 Server Components, Tailwind CSS 4, TypeScript 5, `@spree/sdk`, Sentry), server-only auth (httpOnly JWT cookies + publishable key), MeiliSearch faceted catalog, one-page checkout with Apple/Google Pay/Klarna/Affirm/SEPA, multi-region market routing, GA4 + JSON-LD SEO, and Vercel/Docker deployment. Use when forking or customizing the storefront, or evaluating headless adoption.
tools
Build Spree extensions as Rails engines — gem scaffolding, `bin/rails g spree:extension`, mounting routes/migrations/assets, the modern `prepend` decorator pattern (`*_decorator.rb` with `self.prepended(base)`), generators (`spree:model_decorator`, `spree:controller_decorator`), the four customization surfaces in preference order (Events > Webhooks > Dependencies > Decorators), Spree::Dependencies for swapping service objects, gem release/versioning, and the deprecated Deface engine. Use when building a reusable Spree extension or adding non-trivial customization to an app.
development
Build with Spree's event bus and Webhooks 2.0 — `Spree::Events` publication, `Spree::Subscriber` DSL with `subscribes_to` and `on`, wildcard matching, lifecycle events (`{model}.created/.updated/.deleted` via `publishes_lifecycle_events`), the canonical event catalog (order.*, payment.*, shipment.*, product.*), Webhooks 2.0 endpoints, HMAC-SHA256 signing (`X-Spree-Webhook-Signature`), exponential-backoff retries, and Sidekiq job orchestration. Use when wiring event-driven business logic, building webhook consumers, or replacing ActiveSupport callback chains.
tools
Cross-cutting Spree development patterns — the customization preference hierarchy (Events > Webhooks > Dependencies > Decorators), `Spree::Dependencies` service-object swapping, the `_decorator.rb` + `prepend` + `self.prepended` idiom, idempotent subscribers and webhook receivers, multi-store scoping discipline, prefixed IDs, calculator polymorphism (shipping/promotion/tax share the base), service-object composition with `dry-monads` or simple results, why to avoid `class_eval` reopening and Deface, and Spree-on-Rails idioms (Hotwire/Turbo Stimulus, ActiveStorage, Action Cable, Sidekiq). Use when designing the architecture of a Spree extension or solving cross-cutting concerns.