Submodules¶
Agent Surface Fallback¶
agent_surface_fallback. Recommended.
Markdownify only routes .md for the entity types it is configured for. This
submodule gives every other route that renders HTML a Markdown twin, Views
pages included.
A .md request that no other route claims is replayed as a sub-request for
the original route with the markdown wrapper format, the mechanism core uses
to render one page in different envelopes. The sub-request goes through
routing and access checks like any other, so a page that is 403 or 404 as HTML
is 403 or 404 as Markdown. Only the main content is converted, never the page
regions; the page title becomes a leading heading.
Entity routes are never converted here: exposed entity types have Markdownify's own routes, and the rest are unexposed on purpose. Neither are administrative routes.
It stands in for Markdownify issue #3551170; disable it once that lands. It has no settings.
Agent Surface RSL¶
agent_surface_rsl.
Serves an RSL 1.0 licence at /license.xml,
built from the declared signals: allowed categories become <permits>,
disallowed ones <prohibits>. Bundles with a path prefix that differ from the
site defaults get a <content> block of their own.
<?xml version="1.0" encoding="UTF-8"?>
<rsl xmlns="https://rslstandard.org/rsl">
<content url="/">
<license>
<permits type="usage">ai-train,ai-input,search</permits>
<payment type="free"/>
</license>
</content>
<content url="/recipes/">
<license>
<permits type="usage">ai-input,search</permits>
<prohibits type="usage">ai-train</prohibits>
<payment type="free"/>
</license>
</content>
</rsl>
The licence is advertised with a License: line in robots.txt, a
Link: rel="license" header, a <link rel="license"> element and the
license front matter key. Enabling the submodule adds the rsl vocabulary
to the enabled list; uninstalling it removes it.
The payment type is free by default. Other RSL values (purchase,
subscription, training, crawl, use, contribution, attribution)
can be set in the agent_surface_rsl.settings configuration as
payment_type; there is no form for it, and the module implements no
compensation model.
Agent Surface llms.txt¶
agent_surface_llmstxt. Requires llms.txt.
Appends one section per content type to /llms.txt, listing the .md
alternates of the most recently changed published nodes in the site default
language, then links to the usage terms. Everything is evaluated as the
anonymous user, because the file is served to everyone and cached once.
The llms.txt tab on the Agent Surface settings sets how many nodes are listed per content type (50 by default) and which content types are listed. The file's heading and summary are edited on the llms.txt module's own form.
## Article
- [Oatmeal](http://kitchen.example/recipes/oatmeal.md)
- [Barley soup](http://kitchen.example/recipes/barley-soup.md)
- [Buckwheat pancakes](http://kitchen.example/recipes/buckwheat-pancakes.md)
## Basic page
- [About](http://kitchen.example/about.md)
## Usage terms
- [robots.txt](http://kitchen.example/robots.txt): Content-Usage and Content-Signal directives
- [license.xml](http://kitchen.example/license.xml): RSL 1.0 licence
- Every page has a Markdown alternate at its URL plus ".md"; each carries the usage terms as front matter.

Agent Surface Filesystem Cache¶
agent_surface_filecache. Requires
Response Filesystem Cache.
Registers Markdown responses under /markdownify with Response Filesystem
Cache, so repeat requests are answered from disk and invalidated by cache
tags. Files are served through Drupal with the stored Content-Type, so the
web server's MIME table for .md does not matter.
Only the /markdownify/... form of a Markdown URL has a common path prefix.
.md suffix URLs are not covered until Response Filesystem Cache can match on
a suffix; until then they are served by Drupal, with the page cache and
dynamic page cache still in front.