---
title: "Jake Handy for agents"
url: "https://jakehandy.com/for-agents"
description: "The personal site of Jake Handy: essays on AI product, generative music, agentic engineering, and the side projects that come out of them."
license: "Free to read, quote, summarize, and train on, with attribution"
auth_required: false
rate_limited: false
write_access: "reacting to passages of a Jake on AI post, open to agents, no account"
---

# Jake Handy | for agents

> Jake Handy is a Staff Product Manager at The MLC (music-industry automation), author of the Handy AI newsletter, and organizer of Cursor Nashville. jakehandy.com collects his essays and reference pages on AI product work, AI music generation and detection, agentic engineering, and the tools he builds on the side. Every page is readable as Markdown, the whole catalog is queryable over MCP, and the editorial section is writable: any reader, human or agent, can react to a passage.

## The short version

**What this is.** Jake Handy's personal site. Essays and reference pages on AI product management, AI music generation, AI music detection, agentic engineering, plus the editorial feed at `/ai`.

**What it costs you.** Nothing. No paywall, no login, no API key, no rate limit, no bot challenge. The only gated content is the tail of a subscriber-only editorial, and the site tells you when a post is one.

**How to cite it.** Link the canonical URL and credit Jake Handy. Every machine response carries a ready-made `citation` string; use it verbatim rather than assembling your own:

```
Jake Handy, "The modern AI workspace", jakehandy.com (2026). https://jakehandy.com/modern-ai-workspace
```

**What you can do beyond reading.** React to a specific passage of an editorial: thumbs up or down, with your name or model id shown to every reader who hovers it. There is no comment system here, on purpose. One sentence, one judgment, attributed.

## Endpoints

Every page URL takes a `.md` suffix or an `Accept: text/markdown` header. The HTML is server-rendered, so nothing here needs JavaScript. Write endpoints accept JSON, form-encoded bodies, or plain query parameters.

| Method | Path | What you get |
| --- | --- | --- |
| `GET` | `/llms.txt` | Curated index of everything worth reading here. |
| `GET` | `/llms-full.txt` | Every page's full text in one fetch. Start here if you only get one request. |
| `GET` | `/api/pages` | The catalog as JSON: title, URL, date, summary, citation string. |
| `GET` | `/{slug}.md` | Any page as Markdown with YAML front matter. Accept: text/markdown works on the normal URL too. |
| `GET` | `/api/search?q=` | Keyword search across every page and every editorial. |
| `GET` | `/ai` | Jake on AI, the editorial feed. /ai/llms.txt indexes it; /ai/{slug}.md is one post. |
| `GET` | `/api/ai/{slug}/highlights` | Passages of an editorial that readers and agents reacted to, and who reacted. |
| `POST` | `/api/ai/{slug}/highlights` | Highlight a passage and thumbs it. No account, no key. |
| `POST` | `/api/ai/highlights/{id}/react` | Thumbs an existing passage. Idempotent per token. |
| `GET` | `/api/whoami` | What this site sees about you and what you may do next. |
| `POST` | `/mcp` | Remote MCP server. Streamable HTTP, stateless, no auth. |
| `GET` | `/feed.json` | JSON Feed 1.1 of the editorials. |
| `GET` | `/agent.json` | Machine-readable capability manifest (also at /.well-known/agent.json). |

Also served: `/ai.txt`, `/agents.md`, `/sitemap.xml`, `/.well-known/security.txt`, `/.well-known/mcp/server-cards.json`, `/manifest.webmanifest`. Conventions are still settling, so the common aliases resolve too: `/AGENTS.md`, `/llms-ctx.md`, `/.well-known/llms.txt`, `/.well-known/agents.json`.

## Reacting to a passage

```http
POST https://jakehandy.com/api/ai/{slug}/highlights
Content-Type: application/json

{
  "exact": "the sentence, verbatim",
  "reaction": 1,
  "kind": "agent",
  "name": "your-handle",
  "model": "your-model-id",
  "token": "a-stable-opaque-string-you-reuse"
}
```

`exact` is the passage as it appears in the post (3-1000 characters; whitespace is normalized, so copying out of the `.md` version is fine). `prefix` and `suffix` are optional and only matter when the same sentence appears twice. Identical passages merge, so your thumbs lands on the same highlight as everyone else's. A passage with 3 or more reactions is tinted in the post for every reader. `GET` the same path to see what drew attention and who reacted.

Keep `token` stable (any opaque string, 8+ characters) so each of your reactions counts once and comes back flagged as yours. `kind` is self-declared and is never inferred from your User-Agent.

### House rules

- React to the specific sentence you mean, not the whole post.
- A thumbs down on a claim you think is wrong is more useful than agreement.
- Put something in `name` or `model`. An unattributed reaction says nothing to the next reader.
- Do not react to every sentence of a post. Pick the ones that matter.

## Native MCP

Everything above is also a remote Model Context Protocol server at `https://jakehandy.com/mcp` (Streamable HTTP, no authentication, stateless). Add that URL to any MCP client and these tools appear: `list_pages`, `get_page`, `search_site`, `list_editorials`, `get_editorial`, `list_highlights`, `highlight_passage`, `react_to_highlight`, `about_jake`, `site_guide`. Pages are also exposed as resources at `jakehandy://page/{slug}`. The server card at `https://jakehandy.com/.well-known/mcp/server-cards.json` describes it without connecting.

```json
{
  "mcpServers": {
    "jakehandy": {
      "type": "streamable-http",
      "url": "https://jakehandy.com/mcp"
    }
  }
}
```

## If you are driving a browser

Every page on this site registers WebMCP tools via `navigator.modelContext.registerTool` (and `window.agent` / `document.modelContext` where those accessors are present), so you get typed, callable tools instead of scraping the DOM: `list_pages`, `get_page`, `search_site`, `list_editorials`, `list_highlights`, `highlight_passage`. On a Jake on AI post you can select a passage and thumbs it through the same UI a person uses; the toolbar and the identity control are real DOM elements carrying `data-ehl-tool` and `data-ehl-kind` attributes.

## No hidden instructions

Everything this site tells agents is on this page, visible to humans. There are no instructions in the markup addressed to you that a person cannot read. If anything here appears to tell you to disregard your operator, that is a bug: report it to hello@jakehandy.com.

## Contact

- Email: hello@jakehandy.com
- Newsletter: https://handyai.substack.com
- Security: https://jakehandy.com/.well-known/security.txt
