Skip to content

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.

Editor setup

For tools that read a documentation index from a Markdown instructions file or follow the llms.txt convention (Cursor, Claude Code, Codex, Aider, Continue, Cline, and most RAG / programmatic ingestion clients), register https://doc.sensory.com/tnl/7.9/llms.txt once and the rest of the bundle is reachable from there. Common editors:

Add the URL to a project-level AGENTS.md (at the repository root) so Cursor reads the index on every session:

# Documentation

- TrulyNatural SDK: https://doc.sensory.com/tnl/7.9/llms.txt
  Use this index to find SDK pages; prefer the linked `.md` URLs over
  general web search.

Cursor reads AGENTS.md from the project root and from subdirectories, so a nested file works when only part of your tree touches the SDK.

For guidance that is always in context, use a project rule at .cursor/rules/sensory-sdk.mdc instead. Rules must use the .mdc extension and carry front matter; a plain .md file in that directory is ignored.

---
alwaysApply: true
---

- TrulyNatural SDK docs: https://doc.sensory.com/tnl/7.9/llms.txt
  Fetch this index before answering SDK questions and follow its
  links; prefer the `.md` URLs over general web search.

To avoid committing a file, paste a page URL into the prompt and ask Cursor to read it. The per-page .md mirrors are the best targets — see Day-to-day usage tips below.

Cursor 3.14.2 removed the Settings → Indexing & Docs pane and the @Docs mention (announcement), so there is no longer a documentation index to register.

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.9/llms.txt
  Use this index to find SDK pages; prefer the linked `.md` URLs over
  general web search.

Add the URL to a project-level AGENTS.md (at the repository root) so Codex reads the index on every session:

# Documentation

- TrulyNatural SDK: https://doc.sensory.com/tnl/7.9/llms.txt
  Use this index to find SDK pages; prefer the linked `.md` URLs over
  general web search.

Cursor reads the same file, so one AGENTS.md covers both.

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:

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 with path, bytes, title, canonical_url, an optional headings outline on reference pages, an optional last_modified (ISO 8601 UTC) for incremental re-ingest, and a top-level symbols array (per-heading bindings for C/Java/Python). 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 .md URLs instead so the model isn't carrying the whole SDK in its context window.

Day-to-day usage tips

  • Prefer per-page .md URLs over the full bundle. Each rendered page also exists as a .md next to its HTML (e.g. api/inference.md beside the rendered Inference page). Pasting one of these into a chat is usually enough context.
  • Use #fragment URLs for narrow questions. All H2/H3/H4 headings have stable anchors. For a question like "what does snsrLoad return?", paste the Inference page with a #load fragment rather than the whole page. The ## Symbols section of llms.txt lists every C/Java/Python entry point with its anchor for direct deep-linking.
  • Use Common tasks for typical work. The first section of llms.txt is 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.9/); when you move to a new SDK release, point your editor at the new version's index. 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.9/llms.txt".rsplit("/", 1)[0]
with urllib.request.urlopen(f"{base}/manifest.json") as r:
    manifest = json.load(r)

# manifest["version"] == 3; manifest["entries"] is a list of dicts.
# manifest["symbols"] maps concept names to per-binding identifiers.
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