For two years the file shopping agents looked for at the root of a store was llms.txt. In Spring 2026, Shopify changed that. /agents.md is now the canonical AI-discovery file on every Shopify store, and /llms.txt and /llms-full.txt mirror it. This is the pillar reference for what that file is, what Shopify puts in it for you, why the default is a problem, and how to make yours describe your brand instead of the platform.
What /agents.md is
/agents.md is a Markdown file served at the bare root of your domain, at yourstore.com/agents.md. A shopping agent fetches it to learn three things fast: what this store is, what it sells, and how to transact with it programmatically. It is the agent-facing front door, the same way robots.txt is the crawler-facing one.
The important thing to understand on Shopify is that agents.md is platform-generated and native. You do not have to publish anything for the file to exist. Every store already serves one, automatically, at the domain root. That solves the old Shopify headache where serving a file at / required an app or an app proxy because the platform would not let a theme drop files at the web root.
It also means /agents.md superseded /llms.txt on Shopify. The two older paths, /llms.txt and /llms-full.txt, now mirror or redirect to /agents.md by default. You no longer maintain three files. You maintain one, and the platform keeps the other two pointed at it.
What Shopify generates by default (and why that's a problem)
Here is the catch. The auto-generated agents.md is generic. Its default content is near-identical across stores, because the platform writes it from a template that knows almost nothing specific about your brand. Worse, the default routes shopping agents to install https://shop.app/SKILL.md, Shopify's own agentic rails, rather than telling the agent what is distinctive about you.
That is fine for Shopify. It is a weak position for a merchant. In agentic commerce the file is your pitch to the machine that decides whether to surface you, and the default pitch reads like every other store's. We file every store's agents.md into one of three states:
- Distinctive. A customized file that describes what you sell, why to buy from you, your flagship products, and your policies, while keeping the UCP and MCP rails intact. This is the goal.
- Generic-default. The platform-generated file, untouched. It exists, it is valid, and it says nothing that separates you from the millions of other stores serving the same template. Most stores are here and do not know it.
- Missing. No file resolves at all, usually because of a misconfiguration or a non-standard theme. The agent gets nothing.
The default state is the one worth worrying about, precisely because it looks like success. The file is present and the checker that only asks "does it exist?" gives you a green light. It takes reading the contents to see that it is the same boilerplate every other store ships. We dig into why that matters commercially in your agents.md is identical to every other store.
The one supported way to customize it
On an Online Store 2.0 (Liquid) theme, the only supported way to override the generated file is to create a theme template at templates/agents.md.liquid. A few details matter:
- It is a Liquid and Markdown template, not JSON. Other Shopify templates are often JSON; this one is not.
- A single
agents.md.liquidtemplate overrides all three paths:/agents.md,/llms.txt, and/llms-full.txt. You write one file and the mirror holds. - It lives in your theme, so it is versioned with your theme and edits the way any other template does, through the theme editor or the CLI.
Shopify documents the template at the agents.md.liquid reference and announced the change in the customize llms.txt, llms-full.txt, and agents.md changelog.
The agents Liquid object
Inside templates/agents.md.liquid, Shopify exposes an agents object so your file stays in sync with the platform instead of hardcoding URLs that will drift. The properties:
| Property | What it holds |
|---|---|
agents.store_name | Your store's name |
agents.store_url | Your storefront URL |
agents.ucp_discovery_url | The UCP discovery endpoint ({store_url}/.well-known/ucp) |
agents.mcp_endpoint_url | The MCP endpoint ({store_url}/api/ucp/mcp) |
agents.ucp_versions | Array of supported UCP versions, newest first |
agents.currency | Your store currency |
agents.sitemap_url | Your sitemap URL |
The reason to use these rather than typing the URLs yourself is freshness. The UCP and MCP endpoints are how an agent actually transacts with your store, and they are Shopify's to change. Reference the objects and your file follows the platform. Hardcode them and the day Shopify moves an endpoint, your file starts handing agents a dead address.
A copy-pasteable template
Here is a clean starting point. It keeps the UCP and MCP rails an agent needs to transact, then adds the brand-specific sections the default leaves out: what you sell, why buy from you, featured products, policies, and FAQs.
# {{ agents.store_name }}
> One sentence on what you sell and who it is for.
Write this the way you would describe the store to a person in a sentence.
## How to transact with this store
- UCP discovery: {{ agents.ucp_discovery_url }}
- MCP endpoint: {{ agents.mcp_endpoint_url }}
- Supported UCP versions: {{ agents.ucp_versions | join: ", " }}
- Currency: {{ agents.currency }}
- Sitemap: {{ agents.sitemap_url }}
## What we sell
A short paragraph in your own words. Name the categories you are known
for and the problems your products solve. This is the part the default
file does not have, and the part an agent uses to decide whether you fit
a shopper's question.
## Why buy from us
- What makes the products different (materials, design, sourcing).
- Proof: years in business, awards, notable press, real ratings.
- The promise that lowers a buyer's risk (warranty, guarantee, fit help).
## Featured products
{% for product in collections.frontpage.products limit: 6 %}
- [{{ product.title }}]({{ shop.url }}{{ product.url }}): {{ product.description | strip_html | truncatewords: 20 }}
{% endfor %}
## Policies
- [Shipping]({{ shop.url }}/policies/shipping-policy)
- [Returns]({{ shop.url }}/policies/refund-policy)
- [Privacy]({{ shop.url }}/policies/privacy-policy)
## FAQ
- **Where do you ship?** A direct, factual answer.
- **What is your return window?** A direct, factual answer.
- **How do I get sizing or fit help?** A direct, factual answer.
---
Last updated: {{ "now" | date: "%Y-%m-%d" }}
Adapt the Liquid to your theme's objects. The shape is what matters: keep the transactional rails near the top so an agent can act, then spend the rest of the file saying, in your own words, what makes you worth recommending.
One rule when you fill it in: do not output private merchant data. Shopify cautions against putting a contact email or phone number in agents.md, because the file is broadly cached by agents and crawlers. Link to your public contact page instead of inlining anything personal.
How this fits the rest of your AI-discovery setup
agents.md is the index and the handshake. It is not a substitute for the facts on your pages. An agent that reads your file and then visits a product still needs Product schema with per-variant price and availability, an AI-friendly robots.txt, and the trust signals that make it confident enough to recommend you. The file points at your best pages; the structured data on those pages closes the sale. The complete agentic commerce guide covers how the pieces fit together.
Check which state yours is in
The free AI-readiness checker fetches your store the way an agent does and now reports whether your agents.md is Distinctive, Generic-default, or Missing, alongside your structured data and the other discovery files. If you have never touched the file, there is a good chance it comes back Generic-default, which is the quiet failure worth catching.
You can write and maintain templates/agents.md.liquid by hand. Like the rest of your machine-readable data, the work is keeping it true as your catalog and policies change. AgentReady is building a generator that produces a brand-specific agents.md.liquid from your live catalog and keeps it in sync, so the file stays Distinctive instead of drifting back toward the default.
Run the checker to see which state your store is in today.

Comments
Every comment here comes from a verified email. Write yours, confirm from your inbox, and it's live.
Loading comments…