Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

A2A Php Laravel Package

andreibesleaga/a2a-php

A2A PHP brings the Agent2Agent protocol to PHP and Laravel, helping you expose agents, describe skills, and connect AI services through standardized messaging for interoperable agent-to-agent communication.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What this release actually is: v0.9.6-beta contains no product changes. Every entry is a Dependabot dependency bump (Guzzle, phpstan, php_codesniffer, monolog, ramsey/uuid, actions/checkout). No features, no documented breaking changes, no deprecations, no migration notes. The only "new contributor" is dependabot[bot]. From a TPM standpoint, this release carries no functional signal — it is a maintenance checkpoint, not a capability release.

Architecture fit: a2a-php presents as a PHP SDK for the A2A (Agent-to-Agent) protocol — JSON-RPC over HTTP, agent-card discovery, task lifecycle. The dependency profile (Guzzle for HTTP, monolog for logging, ramsey/uuid for task/message identifiers) is consistent with a client-side protocol library. That fits a Laravel service layer as a composable SDK, but two things must be verified before we treat it as "Laravel-native": (1) whether it ships a ServiceProvider/Facade and config publish tag, and (2) whether it drives Guzzle directly rather than Laravel's Http facade. If it owns its own Guzzle client, we lose the Http::fake() test seam, retry/backoff middleware, and event hooks — that is an integration tax we'd absorb ourselves.

Integration feasibility: Composer-installable and low-ceremony. The blocker is not install, it's constraint resolution: this release moved Guzzle from 7.15.x to 8.x. That is a major-version jump on a runtime HTTP client, shipped inside a beta patch release with no changelog narrative. Laravel pins Guzzle 7.x across a wide band of releases, so a hard ^8.0 constraint in this package will produce a Composer conflict on most existing Laravel apps. We need to see the actual composer.json constraint (^8.0 vs ^7.0|^8.0) before scoping anything.

Technical risk:

  • High — dependency surface moved without a compatibility statement. Guzzle 7→8 is the one change here that can break us at install time and at runtime (PSR-18/PSR-7 behavior, handler stack defaults, exception types).
  • Medium — pre-1.0 instability. At 0.9.x-beta there is no semver guarantee; the API can change under a patch bump. Beta plus a major transitive bump in the same release is a compounding risk.
  • Low — dev tooling churn. phpstan, php_codesniffer, and actions/checkout bumps are CI-only and irrelevant to production.
  • Low — monolog 3.10→3.11 and ramsey/uuid 4.9.2→4.9.3 are patch/minor and safe.

Key questions for the maintainer:

  1. Is the Guzzle constraint ^8.0 only, or dual ^7.0|^8.0? If ^8.0 only, which Laravel minor versions remain installable?
  2. Was Guzzle 8 support actually exercised in CI against a real A2A endpoint, or did Dependabot merge green on unit tests only?
  3. What A2A protocol spec version is targeted, and does the SDK pin it?
  4. Is there a 1.0 roadmap and a stated deprecation policy before we take a beta dependency into production?
  5. Is there a published security policy / CVE response path for a library that terminates agent-to-agent traffic?

Integration Approach

Stack fit: Compatible in shape — a Composer package with HTTP and logging dependencies is a standard Laravel citizen. The fit question is depth: treat it as an SDK wrapped by our own adapter interface, not as something we call directly from controllers. An A2AClient port in our domain layer with this package as the adapter means a Guzzle 8 conflict, a 1.0 breaking change, or a switch to another SDK costs us one class, not a refactor.

Migration path:

  1. Spike first, install second. Spin a throwaway Laravel app on our current framework version and run composer require andreibesleaga/a2a-php:^0.9.6-beta to surface the Guzzle conflict (or absence of one) in fifteen minutes rather than in a sprint.
  2. Pin explicitly. Lock to 0.9.6-beta in composer.json — no caret on a 0.x beta, since ^0.9 still permits API churn and 0.10 may not exist with a clean path.
  3. Adapter, then feature. Build the port interface and contract tests against a stub A2A server before wiring any real agent.
  4. Cut over per integration, not big-bang.

Compatibility: Verify against each Laravel version we actually run, not just the newest. If there are multiple applications on different framework minors, the Guzzle constraint may make the package installable on some and not others — that's a portfolio decision, and pinning the package per-app is acceptable short-term. Confirm PHP version floor too (the phpstan 2.2.x line implies modern PHP; don't assume 8.1).

Sequencing:

  1. Constraint/compatibility spike → go/no-go.
  2. Adapter + contract tests against a fake A2A server.
  3. One low-stakes internal integration (an agent that isn't customer-facing or on the critical path).
  4. Evaluate at 1.0 or after a quarter of stable operation before a second integration.

Do not upgrade Guzzle globally in any application to satisfy this package. If Guzzle 8 is required, isolate it to the one app that needs it, or wait.

Operational Impact

Maintenance: This release is a reminder that the dependency delta is being handled almost entirely by automation. That's efficient but it means the changelog is not a change log — there is no human-authored note explaining what Guzzle 8 means for consumers. We should assume we are the ones who will discover compatibility issues, and budget accordingly. Practical implication: subscribe to the repo's releases, but do not treat a green Dependabot merge as evidence the package works with our stack.

Support: Single-maintainer project at 0.9.x-beta. There is no vendor, no SLA, no support tier. Internal ownership must be explicit — name a person who can read the SDK source and patch it, because that is the realistic escalation path. The upside: it's PHP, MIT-style, and small enough that forking for a hotfix is viable.

Scaling: For a client SDK, scaling concerns are connection pooling and concurrency rather than throughput per se. Guzzle's handler stack and any async/promise usage determine whether we can fan out to many agents concurrently or serialize. Long-running A2A task polling is the real scaling question — if the SDK blocks on task completion, we need queue workers and timeouts rather than synchronous request handling. Validate this in the spike, because it drives whether the integration is a web request or a job.

Failure modes to instrument from day one:

  • Composer resolution failure on install/upgrade — the most likely operational event, and it lands on developers, not production.
  • Silent behavioral drift from a transitive HTTP client change: different timeouts, different redirect handling, different exception classes surfacing where we catch something else.
  • Protocol skew — remote agent speaks a different A2A spec version; the SDK may fail opaquely. Wrap every call in our adapter with typed exceptions and log the raw JSON-RPC payload.
  • Upstream abandonment — no 1.0, no response to issues. Mitigated by the adapter boundary and a documented fork contingency.
  • Beta API break on a patch bump — mitigated by the pinned version and contract tests that fail loudly on upgrade.

Ramp-up: Low. Any Laravel developer can consume this in a day; the A2A protocol concepts (agent card, task, message, artifact) take another day or two. The real ramp is operational maturity — teaching the team to read composer.lock diffs and treat a major transitive bump as a reviewable change. Estimated one engineer-week to a working internal integration on a low-stakes path, contingent on the Guzzle constraint clearing.

Recommendation: Adopt for a time-boxed spike, not a commitment. Approve an internal, non-critical integration on a pinned 0.9.6-beta, gated on the compatibility spike passing. Re-evaluate at 1.0 or after two consecutive releases with human-authored notes and no major transitive bumps. This release neither advances nor blocks that plan — it is housekeeping, and the honest read is that the changelog tells us more about the project's maintenance posture than about its capabilities.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package