---
source_path: "agent-tools.md"
canonical_url: "https://doc.sensory.com/tnl/7.8/agent-tools/"
---

# Coding agents

This site publishes a [machine-readable index](https://doc.sensory.com/tnl/7.8/llms.txt)
and a [per-page Markdown mirror][llmstxt] designed for AI coding tools.
For tools that follow the [`llms.txt`][llmstxt] 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).

[llmstxt]: https://llmstxt.org/

## Editor setup

For tools that follow the [`llms.txt`][llmstxt] convention (Claude Code,
Aider, Continue, Cline, and most RAG / programmatic ingestion clients),
register
[`https://doc.sensory.com/tnl/7.8/llms.txt`](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:

<!-- tab: cursor -->

**Cursor**

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`][llmstxt] link list as a crawl
seed list
([feature request](https://forum.cursor.com/t/cursor-not-support-llms-txt-standard/108980)),
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**:

```text
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.9/`
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](https://forum.cursor.com/t/how-can-i-increase-the-indexing-depth-for-docs/77949)
on larger doc sites), add
[`https://doc.sensory.com/tnl/7.8/llms-full.txt`](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.

<!-- /tab -->

<!-- tab: claude-code -->

**Claude Code**

Add the URL to a project-level `CLAUDE.md` so the agent reads the index
on every session:

```markdown
# 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.
```

<!-- /tab -->

<!-- tab: copilot-chat -->

**Copilot Chat**

Reference individual pages with `#fetch` (for example, `#fetch` on the
[Inference](https://doc.sensory.com/tnl/7.8/api/inference.md#inference) page — see [`manifest.json`](https://doc.sensory.com/tnl/7.8/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`](https://doc.sensory.com/tnl/7.8/manifest.json)
are the unit of context.

<!-- /tab -->

<!-- tab: aider--cline -->

**Aider / Cline**

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`](https://doc.sensory.com/tnl/7.8/llms-full.txt) is a single
~1.3 MiB file better suited to bulk offline indexing.

<!-- /tab -->

<!-- tab: other -->

**Other**

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`](https://doc.sensory.com/tnl/7.8/llms.txt)
- Per-page mirror: each entry in
  [`manifest.json`](https://doc.sensory.com/tnl/7.8/manifest.json) carries a
  `path` (relative to the index) and a `canonical_url` (rendered HTML
  URL). Both `.md` and HTML serve identical content.

<!-- /tab -->

## What's in the bundle

Three files share the same content rendered three ways:

- [`llms.txt`](https://doc.sensory.com/tnl/7.8/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`](https://doc.sensory.com/tnl/7.8/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`](https://doc.sensory.com/tnl/7.8/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`](https://doc.sensory.com/tnl/7.8/api/inference.md)
  beside the rendered [Inference](https://doc.sensory.com/tnl/7.8/api/inference.md#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](https://doc.sensory.com/tnl/7.8/api/inference.md#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 — `llms.txt` for tools that follow the convention,
  or the rendered HTML site root for Cursor. The
  [`/tnl/latest/`](/tnl/latest/llms.txt) 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:

```python
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"] == 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

- The [`llms.txt` proposal][llmstxt] this site implements.
- The [Coding agents callout](https://doc.sensory.com/tnl/7.8/index.md#home) on the home page.
- The [changelog entry](https://doc.sensory.com/tnl/7.8/changes/index.md#v7.8.0) describing the bundle.

<!-- Abbreviation definitions from includes/abbreviations.md -->
*[API]: Application Programming Interface
*[LVCSR]: Large Vocabulary Continuous Speech Recognition model, feed-forward neural net acoustic model with FST decoder
*[SDK]: Software Development Kit
*[STT]: Speech To Text: transformers with language model and CTC decoding
*[TNL]: TrulyNatural, Sensory's large-vocabulary speech recognition technology
*[UDT]: User-Defined Trigger: enrolled wake words and command sets
