Repository navigation
Agents: one skill page for Spaces, pointed at every turn, and binary files that say where their bytes are - #1173
Merged
Merged
Conversation
…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
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 therowboat-spacesskill covered only files in messages. Every agent reads the same description, so this was not specific to Hermes.What changes
skills/rowboat-spaces/SKILL.mdnow holds what an agent needs, in one place: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.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.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_assetreturns 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