Coding agents¶
This site publishes a machine-readable index and a per-page Markdown mirror designed for AI coding tools. For tools that follow the llms.txt convention, pointing your editor at the index is the only setup step; after that "how do I push audio?" / "add Sensory to my CMake build" / "enroll a UDT in Java" land on the right page without further configuration. Cursor indexes HTML rather than llms.txt and uses a different entry point (see its tab below).
Editor setup¶
For tools that follow the llms.txt convention (Claude Code, Aider, Continue, Cline, and most RAG / programmatic ingestion clients), register https://doc.sensory.com/tnl/7.8/llms.txt once and the rest of the bundle is reachable from there. Cursor needs a different entry point — see its tab below. Common editors:
Cursor's Settings → Indexing & Docs → Add Doc is an HTML crawler scoped to the URL you give it: it follows <a href> links under that URL's path prefix and converts each page from HTML to Markdown. As of 2026 it does not parse the llms.txt link list as a crawl seed list (feature request), so pasting https://doc.sensory.com/tnl/7.8/llms.txt will index that single file and stop — none of the linked SDK pages are reached, because they live as siblings of llms.txt, not under llms.txt/.
Instead, register the rendered HTML site root:
https://doc.sensory.com/tnl/7.8/
Give it a name (e.g. Sensory TrulyNatural SDK). Cursor will crawl the MkDocs navigation under /tnl/7.8/ and index the SDK pages it can reach. Reference the doc set with @Docs Sensory TrulyNatural SDK in chat.
If Cursor's crawler misses pages (a reported limitation on larger doc sites), add https://doc.sensory.com/tnl/7.8/llms-full.txt as a second doc with a distinct name (e.g. Sensory TrulyNatural SDK (full Markdown)). This is every page concatenated into one ~1.3 MiB file, which Cursor stores as a single searchable blob — coarser than per-page chunks, but a reliable way to guarantee full coverage.
Add the URL to a project-level CLAUDE.md so the agent reads the index on every session:
# Documentation
- TrulyNatural SDK: https://doc.sensory.com/tnl/7.8/llms.txt
Use this index to find SDK pages; prefer the linked `.md` URLs over
general web search.
Reference individual pages with #fetch (for example, #fetch on the Inference page — see manifest.json for per-page .md URLs). Copilot does not ingest a documentation index globally; the per-page .md URLs in this site's manifest.json are the unit of context.
These tools accept Markdown URLs in their --read / /add / context commands. Point them at individual .md pages from manifest.json rather than the full bundle: each page is sized for a single chat turn, while llms-full.txt is a single ~1.3 MiB file better suited to bulk offline indexing.
Any tool that follows an AI-oriented documentation index typically accepts either an llms.txt-style entry point or a sitemap of Markdown URLs. The two relevant URLs are:
- Index:
https://doc.sensory.com/tnl/7.8/llms.txt - Per-page mirror: each entry in
manifest.jsoncarries apath(relative to the index) and acanonical_url(rendered HTML URL). Both.mdand HTML serve identical content.
What's in the bundle¶
Three files share the same content rendered three ways:
llms.txt— orientation index (~27 KiB). Curated Common tasks and Start here routes plus a section by path prefix. This is the file most tools want.manifest.json— a JSON index of every page withpath,bytes,title,canonical_url, an optionalheadingsoutline on reference pages, and an optionallast_modified(ISO 8601 UTC) for incremental re-ingest. Useful for budgeting context size or programmatically picking pages.llms-full.txt— every Markdown page concatenated into one file (~1.3 MiB), with a<!-- FILE: … -->header per page. Reserve this for bulk offline indexing; for day-to-day chat, fetch individual.mdURLs instead so the model isn't carrying the whole SDK in its context window.
Day-to-day usage tips¶
- Prefer per-page
.mdURLs over the full bundle. Each rendered page also exists as a.mdnext to its HTML (e.g.api/inference.mdbeside the rendered Inference page). Pasting one of these into a chat is usually enough context. - Use
#fragmentURLs for narrow questions. All H2/H3/H4 headings have stable anchors. For a question like "what doessnsrLoadreturn?", paste the Inference page with a#loadfragment rather than the whole page. The## Symbolssection ofllms.txtlists every C/Java entry point with its anchor for direct deep-linking. - Use Common tasks for typical work. The first section of
llms.txtis curated to match natural-language prompts: "first program", "build integration", "push audio", "wake word then LVCSR or STT", "enroll a UDT in Java", and a dozen more. Most agent prompts will resolve through one of these routes. - Re-pin the URL on each SDK upgrade. This site publishes a per-version doc tree (
/tnl/7.8/); when you move to a new SDK release, point your editor at the new version's index —llms.txtfor tools that follow the convention, or the rendered HTML site root for Cursor. The/tnl/latest/alias always redirects to the most recent published version if you'd rather track HEAD.
Programmatic ingestion¶
If you're writing a tool, not registering URLs in an editor:
import json, urllib.request
base = "https://doc.sensory.com/tnl/7.8/llms.txt".rsplit("/", 1)[0]
with urllib.request.urlopen(f"{base}/manifest.json") as r:
manifest = json.load(r)
# manifest["version"] == 2; manifest["entries"] is a list of dicts.
for page in manifest["entries"]:
if page["bytes"] < 8192: # small reference page
with urllib.request.urlopen(f"{base}/{page['path']}") as r:
text = r.read().decode("utf-8")
# ingest `text` keyed on page["canonical_url"]
The canonical_url field is the most stable join key across the two representations: the same string identifies a page in the loose on-host mirror, in manifest.json, in llms-full.txt's <!-- FILE: … --> headers, and as a hyperlink target inside other pages.
See also¶
- The
llms.txtproposal this site implements. - The Coding agents callout on the home page.
- The changelog entry describing the bundle.