Skip to content

Agents: one skill page for Spaces, pointed at every turn, and binary files that say where their bytes are - #1173

Merged
ramnique merged 1 commit into
mainfrom
ramnique/agents-skill-page
Oct 8, 2026
Merged

ramnique merged 1 commit into
mainfrom
ramnique/agents-skill-page

Conversation

@ramnique

@ramnique ramnique commented Oct 8, 2026

Copy link
Copy Markdown
Contributor

On Oct 6, Arjun asked Hermes to read a PNG stored in the Main space, and it answered that it couldn't. Its key could have downloaded the file from GET /v1/spaces/:spaceId/blobs/:hash, but nothing told it so. read_asset's description said the bytes were "not readable over this face", and the rowboat-spaces skill covered only files in messages. Every agent reads the same description, so this was not specific to Hermes.

What changes

  • One skill page. skills/rowboat-spaces/SKILL.md now holds what an agent needs, in one place:
    • its setup: the MCP server, its key in the environment, and to say which one is missing;
    • the mention rules, unchanged;
    • what the tools let it do, without their schemas;
    • how files download, binary ones included.
  • A pointer every turn. The standing paragraph of the Replicas, Conductor and Agent37 prompts tells the agent to load the skill once per session, or to read it on GitHub (raw.githubusercontent.com/…/skills/rowboat-spaces/SKILL.md). An agent that can't install skills reads the same page. The mention rules stay in the paragraph too, because a skipped skill would break hand-offs without anyone seeing it.
  • Binary reads say where the bytes are. read_asset's description names the blob route. On the agent face, the result gains a second text block with the full download address. The structured result is unchanged, so both faces return the same object, and the app's own tools (which read only the structured result) see no difference.
  • SPEC §8 and CONTRACT.md are amended, dated 2026-10-08.

Wire: additive. The agent face adds a text block, nothing else changes, and the server and app can deploy in either order.

Hermes: the plugin's platform hint gets the same line in rowboatlabs/hermes-rowboat (v0.5.1). It's committed locally and will be pushed and tagged after this merges, because the hint points at the skill on main.

Tests: Harbor 586 (585 pass, 1 skipped), including a new one: a binary read_asset returns the note, the address in it downloads the bytes, and a text read has no note. App core: 1,058 pass. Plugin: 54 pass. Not yet tried live with an agent.

🤖 Generated with Claude Code

…files that say where their bytes are

On 2026-10-06 Hermes was asked to read a PNG in its space and answered that
it could not. Its key could download the file from
GET /v1/spaces/:spaceId/blobs/:hash, but nothing told it so: read_asset's
description said the bytes were "not readable over this face", and the
rowboat-spaces skill covered only files in messages.

- The rowboat-spaces skill is now the one page an agent needs: its setup
  (the MCP server, its key in the environment, and to say which is
  missing), the mention rules, what the tools let it do without their
  schemas, and how files download, binary ones included.
- The standing paragraph of the coding-agent connectors tells the agent to
  load the skill once per session, or to read it at its address on GitHub,
  so an agent that cannot install skills reads the same page. The mention
  rules stay in the paragraph, since a skipped skill would break hand-offs
  silently.
- read_asset's description says where a binary file's bytes download, and
  on the agent face its result adds a second text block with the full
  address. The structured result is unchanged, so both faces return the
  same object and the app's own tools see no difference.

SPEC §8 and CONTRACT.md are amended to match. The Hermes plugin points its
platform hint at the same page in its own repository.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ramnique
ramnique merged commit 798763b into main Oct 8, 2026
3 checks passed
ramnique added a commit to rowboatlabs/hermes-rowboat that referenced this pull request Oct 8, 2026
The hint now tells Hermes to load the rowboat-spaces skill once per
session, or to read it at its address on GitHub, so a Hermes that never
installed the skill still learns its setup, the tools and how files
download (rowboatlabs/rowboat#1173). On 2026-10-06 a Hermes in Spaces said
it could not read a PNG in its space, though its key could download it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
pasogott pushed a commit to pasogott/rowboat that referenced this pull request Oct 8, 2026
…sses it

`hermes skills update rowboat-spaces` refused the skill from rowboatlabs#1173 as
DANGEROUS, --force or not: Hermes's scanner (tools/skills_guard.py,
env_exfil_curl) blocks any skill whose text runs curl with a secret-shaped
variable, and the Files section's recipe was
`curl … "Authorization: Bearer $ROWBOAT_AGENT_KEY"`. The section now says
the same request in prose: a GET to the blob route with the key in the
Authorization header, following redirects.

Checked with Hermes's own scanner, at the installed version and at the
current source: the old text is dangerous on both, the new one safe. A
docs test mirrors the scanner's curl, wget and fetch patterns, so the
recipe can't come back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant