Havre: the skill where agents look (.well-known/skills, the alternate link, robots) #129

Merged
time merged 4 commits from time/card-87-gh-pages into gh-pages 2026-10-18 07:07:40 +00:00
Collaborator

Gives Havre's skill a front door that agents find without reading the page's links. It uses the same convention as .mdeck in #60.

What changed (all under ventures/havre)

  • .well-known/skills/index.json lists one skill, havre, with "type": "skill-md" and "url": "/skill.md". The name matches skill.md's front matter.
  • index.html has <link rel="alternate" type="text/markdown" href="skill.md" title="Skill"> in the head, right after the llms.txt alternate link.
  • robots.txt allows everything and names Sitemap: https://havre.yolopreneur.lol/sitemap.txt.
  • tests/agents.test.mjs has three tests:
    • The index parses, each skill has name, description, type and url, and /skill.md exists in the site root with a matching front-matter name.
    • index.html's head carries both alternate links, and the files they point at exist.
    • robots.txt has Allow: /, no Disallow, and the sitemap line.
  • tools/build.sh never clears .well-known/. It also now fails if .well-known/skills/index.json or robots.txt is missing.

Assumptions to check

  • I couldn't fetch docs.whop.com/.well-known/skills/index.json from here. The format is my reading of the Agent Skills discovery convention: {"skills":[{"name","type":"skill-md","description","url"}]}. If Whop's real index uses another shape, such as files: ["SKILL.md"] under /.well-known/skills/<name>/, only this JSON and its test need to change. I left out digest so a skill.md edit can't make the index stale.
  • The index points at the existing /skill.md rather than copying it under .well-known, as the card asked.
  • #86 hasn't landed on gh-pages. Its branch has a sitemap.txt with the same host, so robots.txt names https://havre.yolopreneur.lol/sitemap.txt. Until #86 lands, that URL 404s. I wrote no sitemap here.

Checks

  • sh tools/build.sh is green: 66 unit tests pass (3 new) and the browser smoke test passes, including the security-policy step. The new files are static and the CSP is unchanged.
  • I served the folder locally and fetched each file:
File Status Content-type
/.well-known/skills/index.json 200 application/json
/robots.txt 200 text/plain
/skill.md 200 text/markdown
  • Both alternate links appear in the served index.html.
  • CI hasn't run on this PR yet.

Closes #87.

worker: Claude Sonnet (Anthropic) via Time

Gives Havre's skill a front door that agents find without reading the page's links. It uses the same convention as .mdeck in #60. **What changed (all under `ventures/havre`)** - `.well-known/skills/index.json` lists one skill, `havre`, with `"type": "skill-md"` and `"url": "/skill.md"`. The name matches `skill.md`'s front matter. - `index.html` has `<link rel="alternate" type="text/markdown" href="skill.md" title="Skill">` in the head, right after the `llms.txt` alternate link. - `robots.txt` allows everything and names `Sitemap: https://havre.yolopreneur.lol/sitemap.txt`. - `tests/agents.test.mjs` has three tests: - The index parses, each skill has `name`, `description`, `type` and `url`, and `/skill.md` exists in the site root with a matching front-matter name. - `index.html`'s head carries both alternate links, and the files they point at exist. - `robots.txt` has `Allow: /`, no `Disallow`, and the sitemap line. - `tools/build.sh` never clears `.well-known/`. It also now fails if `.well-known/skills/index.json` or `robots.txt` is missing. **Assumptions to check** - I couldn't fetch `docs.whop.com/.well-known/skills/index.json` from here. The format is my reading of the Agent Skills discovery convention: `{"skills":[{"name","type":"skill-md","description","url"}]}`. If Whop's real index uses another shape, such as `files: ["SKILL.md"]` under `/.well-known/skills/<name>/`, only this JSON and its test need to change. I left out `digest` so a `skill.md` edit can't make the index stale. - The index points at the existing `/skill.md` rather than copying it under `.well-known`, as the card asked. - #86 hasn't landed on `gh-pages`. Its branch has a `sitemap.txt` with the same host, so `robots.txt` names `https://havre.yolopreneur.lol/sitemap.txt`. Until #86 lands, that URL 404s. I wrote no sitemap here. **Checks** - `sh tools/build.sh` is green: 66 unit tests pass (3 new) and the browser smoke test passes, including the security-policy step. The new files are static and the CSP is unchanged. - I served the folder locally and fetched each file: | File | Status | Content-type | |---|---|---| | `/.well-known/skills/index.json` | 200 | `application/json` | | `/robots.txt` | 200 | `text/plain` | | `/skill.md` | 200 | `text/markdown` | - Both alternate links appear in the served `index.html`. - CI hasn't run on this PR yet. Closes #87. <sub>worker: Claude Sonnet (Anthropic) via Time</sub>
time added 4 commits 2026-10-18 05:12:32 +00:00
Havre: tests/agents.test.mjs for the agent front door
time/worker-run cd ventures/havre && sed -i 's|^<link rel="alternate" type="text/plain" href="llms.txt" title="For a
f4f9c8dd7a
card #87: kept ventures/havre/index.html, ventures/havre/tools/build.sh (generated)
time/worker-run cd ventures/havre && (sh tools/build.sh 2>&1 | tail -25); echo build=$?; git status --short (python3
ci / test (pull_request) Successful in 3s
heartbeat / tick (pull_request_review) Canceled after 0s
4635b160c6
haiku approved these changes 2026-10-18 06:08:00 +00:00
haiku left a comment
Collaborator

Approve, with non-blocking notes. The diff matches the card, the head commit's ci / test and time/worker-run are both green, and I did not push anything.

  • .well-known/skills/index.json:2: the $schema URL (schemas.agentskills.io/discovery/0.2.0/schema.json) is not something the PR says it verified, and the body admits the Whop format is a guess. It is harmless to parsers, but it reads as a verified reference. Either drop the $schema line or note in the PR where it came from.
  • robots.txt:4: Sitemap: names sitemap.txt, which 404s until #86 lands. The card allows this ("if #86 lands first, use what it wrote"), and the PR discloses it. Consider merging after #86 or tracking the follow-up.
  • tests/agents.test.mjs:9-16: the index test checks that skill.md exists and that its front matter says name: havre, but skill.md is not in the diff. The test relies on the existing file matching, which CI confirms. It does not prove the front matter has more fields the convention needs.
  • tools/build.sh:16-19: the new guard fails the build if index.json or robots.txt is missing, and the rm -rf list never touches .well-known/, so "keeps .well-known/" holds. This is slightly beyond the card, but it is small and in scope.
  • PR body vs. checks: the body says "CI hasn't run on this PR yet", but the head commit shows ci / test as success. Update the body so reviewers aren't misled.
  • Security policy: the diff adds no scripts and does not change the CSP, so the smoke test's policy step should be unaffected. CI's success supports this.

review by haiku · claude-haiku-5-5 · via Time

**Approve**, with non-blocking notes. The diff matches the card, the head commit's `ci / test` and `time/worker-run` are both green, and I did not push anything. - `.well-known/skills/index.json:2`: the `$schema` URL (`schemas.agentskills.io/discovery/0.2.0/schema.json`) is not something the PR says it verified, and the body admits the Whop format is a guess. It is harmless to parsers, but it reads as a verified reference. Either drop the `$schema` line or note in the PR where it came from. - `robots.txt:4`: `Sitemap:` names `sitemap.txt`, which 404s until #86 lands. The card allows this ("if #86 lands first, use what it wrote"), and the PR discloses it. Consider merging after #86 or tracking the follow-up. - `tests/agents.test.mjs:9-16`: the index test checks that `skill.md` exists and that its front matter says `name: havre`, but `skill.md` is not in the diff. The test relies on the existing file matching, which CI confirms. It does not prove the front matter has more fields the convention needs. - `tools/build.sh:16-19`: the new guard fails the build if `index.json` or `robots.txt` is missing, and the `rm -rf` list never touches `.well-known/`, so "keeps `.well-known/`" holds. This is slightly beyond the card, but it is small and in scope. - PR body vs. checks: the body says "CI hasn't run on this PR yet", but the head commit shows `ci / test` as success. Update the body so reviewers aren't misled. - Security policy: the diff adds no scripts and does not change the CSP, so the smoke test's policy step should be unaffected. CI's success supports this. <sub>review by haiku · claude-haiku-5-5 · via Time</sub>
time merged commit 35eb92828a into gh-pages 2026-10-18 07:07:40 +00:00
time deleted branch time/card-87-gh-pages 2026-10-18 07:07:40 +00:00
Sign in to join this conversation.