koh / sylius-agent-ready
Metapackage pulling in the full koh agent-readiness surface for Sylius: discovery documents, llms.txt, agent authentication and the agentic commerce protocols.
Package info
github.com/ohartwig/sylius-agent-ready
Type:metapackage
pkg:composer/koh/sylius-agent-ready
Requires
- php: ^8.5.11
- koh/sylius-a2a: ^1.0
- koh/sylius-acp: ^1.0
- koh/sylius-agent-contracts: ^1.1
- koh/sylius-agent-skills: ^1.0
- koh/sylius-api-catalog: ^1.0
- koh/sylius-auth-md: ^1.0
- koh/sylius-llms-txt: ^1.0
- koh/sylius-markdown: ^1.0
- koh/sylius-mcp-oauth: ^1.0
- koh/sylius-mpp: ^1.0
- koh/sylius-robots-txt: ^1.0
- koh/sylius-web-bot-auth: ^1.0
- koh/sylius-x402: ^1.0
- stefandoorn/sitemap-plugin: ^3.0.1
Requires (Dev)
None
Suggests
- koh/sylius-mcp: MCP tools and the SEP-1649 server card.
- koh/sylius-ucp: Universal Commerce Protocol discovery profile.
- koh/sylius-webmcp: Exposes shop actions to in-browser agents.
Provides
None
Conflicts
None
Replaces
None
README
koh/sylius-agent-ready
Metapackage. Pulls in the full agent-readiness surface for a Sylius shop:
discovery documents, llms.txt, agent authentication and the agentic commerce
protocols, each as its own independently installable package.
Install
composer require koh/sylius-agent-ready
What comes with it
| Package | Serves |
|---|---|
koh/sylius-agent-contracts |
the shared registries and koh:agent:check |
koh/sylius-robots-txt |
/robots.txt with AI crawler rules and Content Signals |
stefandoorn/sitemap-plugin |
/sitemap.xml |
koh/sylius-llms-txt |
/llms.txt, /llms-full.txt |
koh/sylius-markdown |
Accept: text/markdown negotiation |
koh/sylius-api-catalog |
/.well-known/api-catalog and the Link headers |
koh/sylius-agent-skills |
/.well-known/agent-skills/index.json |
koh/sylius-a2a |
/.well-known/agent-card.json |
koh/sylius-mcp-oauth |
the OAuth 2.1 server and its RFC 8414 / 9728 metadata |
koh/sylius-auth-md |
/auth.md |
koh/sylius-web-bot-auth |
/.well-known/http-message-signatures-directory |
koh/sylius-acp |
/.well-known/acp.json and the agent product feed |
koh/sylius-mpp |
/openapi.json with x-payment-info |
koh/sylius-x402 |
HTTP 402 payment middleware (off by default) |
Suggested, not required: koh/sylius-mcp (MCP tools and server card),
koh/sylius-webmcp (in-browser agents), koh/sylius-ucp (UCP profile).
Configure — installing is not enough
A metapackage cannot register bundles or import routes. Three things stay manual, and the shop is not agent-ready until all three are done.
1. Register the bundles in config/bundles.php.
2. Import the routes. One file, one entry per installed bundle:
# config/routes/koh_agent.yaml — must load before api_platform.yaml koh_robots_txt: { resource: '@KohSyliusRobotsTxtBundle/config/routes.php' } koh_llms_txt: { resource: '@KohSyliusLlmsTxtBundle/config/routes.php' } koh_api_catalog: { resource: '@KohSyliusApiCatalogBundle/config/routes.php' } koh_agent_skills: { resource: '@KohSyliusAgentSkillsBundle/config/routes.php' } koh_a2a: { resource: '@KohSyliusA2aBundle/config/routes.php' } koh_mcp_oauth: { resource: '@KohSyliusMcpOAuthBundle/config/routes.php' } koh_auth_md: { resource: '@KohSyliusAuthMdBundle/config/routes.php' } koh_web_bot_auth: { resource: '@KohSyliusWebBotAuthBundle/config/routes.php' } koh_acp: { resource: '@KohSyliusAcpBundle/config/routes.php' } koh_mpp: { resource: '@KohSyliusMppBundle/config/routes.php' }
There is no ignore_errors in the routing loader — that is a DI import option.
A resource naming an uninstalled bundle is a hard failure, so keep this file in
step with config/bundles.php.
3. Exempt the paths from the shop firewall, above the Sylius entries:
security: firewalls: koh_agent_public: pattern: '^/(\.well-known/(?!oauth)|llms\.txt|llms-full\.txt|auth\.md|robots\.txt|sitemap|openapi\.json)' security: false # … then the Sylius firewalls
sylius.security.shop_regex is a catch-all that matches /.well-known/… and is
stateful. Without this, every crawler hit starts a session and the responses
carry Set-Cookie — uncacheable, for documents whose whole point is to be
served from a shared cache. An access_control entry does not help; it is
evaluated only after a firewall has already matched.
Also delete public/robots.txt. The web server answers it from disk before
Symfony runs and silently shadows the dynamic route.
Verify
bin/console koh:agent:check
Sends a request to every announced endpoint and reports what came back. It catches the failure none of the unit tests can: a bundle registers an endpoint, the discovery documents advertise it, and the route was never imported — so agents are pointed at a 404 while every document looks correct.
It also flags any discovery response that sets a cookie, which means the firewall exemption is missing.
Decommission
Decommission the member packages first — several hold state that outlives the
code: revoke outstanding MCP access tokens before removing
koh/sylius-mcp-oauth, revoke the Web Bot Auth seed after removing
koh/sylius-web-bot-auth, and switch x402 off before removing it. Each
package's README has its own section. Then remove the composer require, the
bundle entries, config/routes/koh_agent.yaml and the koh_agent_public
firewall. Restore a static public/robots.txt if you want one.
Security
Report vulnerabilities privately — see SECURITY.md. Advisories are published as CSAF 2.0 at https://ole-hartwig.eu/.well-known/csaf/.
The threat model for the whole package family is in docs/threat-model.md.
Licence
MIT — see LICENSE.