# Two lines of curl is a front door

> For agents: start with the [agent guide](https://ratstack.sh/llms.txt). Every page is Markdown by default; add `Accept: text/html` for HTML.

Free workshop: [how to burn a trillion tokens and get good results](/tokenmaxx#interested).

Our first observed agent application uses the [Markdown workshop page](/tokenmaxx) and [llms.txt](/llms.txt). The request reconstruction contains three agent requests: two reads, then one POST.

| Relative to the first request | Request                           |
| ----------------------------- | --------------------------------- |
| Start                         | GET /tokenmaxx with text/markdown |
| 0.263 seconds later           | GET /llms.txt                     |
| 18 minutes 16 seconds later   | POST /api/joinInterest            |

**What to notice:** Two reads supply enough instructions to make the call.

The reconstruction records:

- No requests for OpenAPI, AGENTS.md, lore, or MCP.
- One POST and no retry.
- A 200 submission response.
- Confirmation 88 seconds after submission.

## What the requests do not tell us

The 18-minute gap fits the [page's interview and approval flow](https://github.com/joelhooks/rat-stack/blob/main/apps/mischief/content/tokenmaxx.md). It does not reveal the conversation. The reconstruction contains neither the agent's questions nor the person's answers.

Browser activity and agent requests are linked by timing only. The user agent does not name a harness. We cannot identify which agent runs the calls.

This is one counts-only observation from our request analytics. It does not claim that agents never need [OpenAPI](/lore/openapi-describes-the-refusal-too) or [MCP](/lore/mcp-is-another-surface).

[Interest signup](/systems/interest) keeps the consent and confirmation boundary. [HATEOAS](/lore/hateoas) explains why the page carries the next action.

## Sources

1. [apps/mischief/content/tokenmaxx.md](https://github.com/joelhooks/rat-stack/blob/main/apps/mischief/content/tokenmaxx.md)
   GitHub. apps/mischief/content/tokenmaxx.md Accessed 2026-10-02.

2. [apps/mischief/src/content.ts](https://github.com/joelhooks/rat-stack/blob/main/apps/mischief/src/content.ts)
   GitHub. apps/mischief/src/content.ts Accessed 2026-10-02.

3. [packages/core/src/join-interest-contract.ts](https://github.com/joelhooks/rat-stack/blob/main/packages/core/src/join-interest-contract.ts)
   GitHub. packages/core/src/join-interest-contract.ts Accessed 2026-10-02.

4. [packages/events/src/capture.ts](https://github.com/joelhooks/rat-stack/blob/main/packages/events/src/capture.ts)
   GitHub. packages/events/src/capture.ts Accessed 2026-10-02.

## Lore on this page

- [MCP is another surface](/lore/mcp-is-another-surface)
- [Analytics](/systems/analytics)

## Linked from

- Agent guide → An Effect stack so pure (aspirational) Kit Langton will blush. → [Read page](https://ratstack.sh/llms.txt)

- Change log → What changed in the files served here, newest first. → [Read page](https://ratstack.sh/log)

- Full agent guide → An Effect stack so pure (aspirational) Kit Langton will blush. → [Read page](https://ratstack.sh/llms-full.txt)

- HATEOAS → Links in a representation tell its reader what to do next; rat-stack applies that idea to agent surfaces. → [Read page](https://ratstack.sh/lore/hateoas)

- log.md → The generated change log as Markdown. → [Read page](https://ratstack.sh/log.md)

- MCP is another surface → MCP lists and calls schema-typed tools; rat-stack projects the same handlers instead of adding MCP-only behavior. → [Read page](https://ratstack.sh/lore/mcp-is-another-surface)

- Rat Stack lore | rat-stack → Short, source-grounded notes on the ideas and decisions behind rat-stack. → [Read page](https://ratstack.sh/lore)

- VISION.md → What this starter is for and what a useful copy should keep. → [Read page](https://ratstack.sh/VISION.md)
