angeo / module-llms-txt
angeo/module-llms-txt
Magento 2 module for AI Engine Optimization (AEO). Generates spec-compliant llms.txt and llms-full.txt per llmstxt.org standard, plus streaming JSONL for vector indexing. Multi-store, multi-website, CLI, cron, async admin UI, Page Builder-aware sanitization, customer-group pricing, atomic writes, ETag/Cache-Control, .md mirrors.
Angeo LLMs.txt — Magento 2
Generates spec-compliant llms.txt and JSONL files for ChatGPT, Claude, Gemini, and Perplexity AI visibility.
What's new in v2.0.0
- 4 critical bugs fixed — see Bug fixes section below
- Spec-compliant format — output now follows llmstxt.org with H1 title,
##sections, and markdown links bin/magento angeo:llms:generate— CLI command (was missing in v1)- Files in
var/— moved frompub/media/(publicly browsable) topub/media/angeo/llms/(served via PHP controller) AbstractGenerator— eliminates 95% duplicate code betweenLlmsGeneratorandJsonlGenerator- Single
ProviderInterface— replaces two identical interfaces from v1 - Per-store exception safety — one failing store doesn't block others; errors logged
- Admin config — enable/disable per store, product limit, toggle JSONL generation
Bug fixes (v1 → v2)
| Bug | Impact | Fix |
|---|---|---|
JSONL providers: json_encode() after foreach |
Only the last category/product/page was encoded — all others silently dropped | Moved json_encode() inside loop; lines collected into array |
Cron namespace triple-nested (LlmsTxt\LlmsTxt\LlmsTxt\Cron) |
PHP fatal error on every cron run — cron never executed | Fixed to Angeo\LlmsTxt\Cron |
$output initialized before store loop |
Store N's file contained content from stores 1…N merged | Moved $output = '' inside the store loop |
Jsonl\CategoryProvider missing root category filter |
Returned system categories (ID 1, 2) and categories from all store views | Added path LIKE 1/{rootId}/% filter (same as Llms version) |
Installation
composer require angeo/module-llms-txt
bin/magento setup:upgrade
bin/magento cache:flush
Usage
CLI (recommended for CI/CD and first-time generation)
# Generate for all active stores
bin/magento angeo:llms:generate
# Generate for a specific store
bin/magento angeo:llms:generate --store=en_us
# Skip JSONL (llms.txt only)
bin/magento angeo:llms:generate --no-jsonl
# Skip llms.txt (JSONL only)
bin/magento angeo:llms:generate --no-llms
Admin UI
Navigate to Stores → Configuration → Angeo → LLMs.txt and click Generate Now.
Cron
Runs automatically every day at 02:00 server time. Verify your Magento cron is active:
bin/magento cron:run --group=default
Generated files
Files are written to pub/media/angeo/llms/ and served via a PHP controller:
| URL | File | Description |
|---|---|---|
yourstore.com/llms.txt |
pub/media/angeo/llms/llms_default.txt |
Spec-compliant llms.txt for AI crawlers |
yourstore.com/llms.jsonl |
pub/media/angeo/llms/llms_default.jsonl |
JSONL for vector indexing pipelines |
For multi-store: each store gets its own file (llms_en_us.txt, llms_de.txt, etc.) served at the store's base URL.
llms.txt format (llmstxt.org spec)
# EN
> Store URL: https://angeo.test
> Currency: USD
> Locale: en
## Categories
- [All products](https://angeo.test/all-products.html)
- [Sale](https://angeo.test/sale.html)
## Products
- [test](https://angeo.test/test1.html): 100.00 USD
- [test2](https://angeo.test/test2.html): 20.00 USD
- [test3](https://angeo.test/test3.html): 30.00 USD
## Pages
- [Home page](https://angeo.test/home): CMS homepage content goes here.
Configuration
Stores → Configuration → Angeo → LLMs.txt
| Setting | Description | Default |
|---|---|---|
| Enabled | Enable/disable module | Yes |
| Include Products | Add ## Products section |
Yes |
| Include Categories | Add ## Categories section |
Yes |
| Include CMS Pages | Add ## Pages section |
Yes |
| Generate JSONL | Also generate .jsonl file |
Yes |
| Product limit | Max products to include (0 = unlimited) | 5000 |
Extending with custom providers
Register additional content sections via di.xml:
<type name="Angeo\LlmsTxt\Model\LlmsGenerator">
<arguments>
<argument name="providers" xsi:type="array">
<item name="my_custom" xsi:type="object">Vendor\Module\Model\Llms\Providers\MyProvider</item>
</argument>
</arguments>
</type>
Your provider implements Angeo\LlmsTxt\Api\ProviderInterface:
public function provide(StoreInterface $store): string
{
return "## My Section\n\n- [Item](url): description\n\n";
}
Testing
vendor/bin/phpunit -c app/code/Angeo/LlmsTxt/phpunit.xml
The Angeo AI Suite
| Module | Purpose |
|---|---|
angeo/module-aeo-audit |
AEO audit — 8 signals scored |
angeo/module-llms-txt |
This module — llms.txt generator |
angeo/module-openai-product-feed |
CSV product feed |
angeo/module-openai-product-feed-api |
ACP REST API |
License
MIT — see LICENSE
No changelog yet
The vendor hasn't published a changelog. Tagged releases appear in the Versions tab.
| Version | Stability | QA Status | Released |
|---|---|---|---|
| 3.0.5 | stable | Fail | 2026-06-04 19:39:51 |
| 3.0.4 | stable | Not tested | 2026-06-03 18:23:19 |
| 3.0.3 | stable | Not tested | 2026-06-03 18:04:49 |
| 3.0.2 | stable | Not tested | 2026-06-03 17:46:25 |
| 3.0.1 | stable | Not tested | 2026-06-03 16:17:59 |
| 3.0.0 | stable | Not tested | 2026-05-29 20:31:58 |
| 2.1.4 | stable | Not tested | 2026-05-06 04:36:21 |
| 2.1.3 | stable | Not tested | 2026-04-30 07:41:35 |
| 2.1.2 | stable | Not tested | 2026-04-30 05:05:25 |
| 2.1.1 | stable | Not tested | 2026-04-29 20:38:27 |
| 2.1.0 | stable | Not tested | 2026-04-29 20:07:40 |
| 2.0.0 | stable | Not tested | 2026-04-16 18:52:27 |
| 1.1.2 | stable | Not tested | 2026-03-20 18:38:35 |
| 1.1.1 | stable | Not tested | 2026-03-18 18:33:44 |
Requires 12
| Package | Constraint |
|---|---|
| ext-json | * |
| ext-mbstring | * |
| magento/framework | >=102.0 |
| magento/module-backend | >=102.0 |
| magento/module-catalog | >=104.0 |
| magento/module-catalog-inventory | >=100.4 |
| magento/module-catalog-url-rewrite | >=100.4 |
| magento/module-cms | >=104.0 |
| magento/module-config | >=101.2 |
| magento/module-store | >=101.0 |
| magento/module-url-rewrite | >=102.0 |
| php | ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0 |
Requires-dev 3
| Package | Constraint |
|---|---|
| magento/magento-coding-standard | ^32.0 |
| phpstan/phpstan | ^1.10 |
| phpunit/phpunit | ^10.5 |
No QA results yet
QA pipelines haven't run for this version. Status appears here once the vendor publishes a tagged release that gets ingested.
Turn an existing module into recurring revenue.
If you already maintain a Magento 2 module on GitHub or GitLab, listing it on Packagento takes about five minutes. We mirror your tags, handle distribution signing, and route paid licenses through Stripe Connect, so you can keep shipping the way you already do.