Repository navigation
pstack: poteto-mode name breaks the documented identifier constraint and fails to load on other harnesses #237
Description
Summary
pstack/skills/poteto-mode/SKILL.md declares:
name: Poteto ModeThis conflicts with Cursor's own documented constraint for the field. From Agent Skills, Frontmatter fields:
name— Required. Skill identifier. Lowercase letters, numbers, and hyphens only. Must match the parent folder name.
Poteto Mode has capitals and a space, and it does not match its parent folder poteto-mode. The Agent Skills specification states the same requirement ("Must match the parent directory name").
It is the only one of pstack's 44 skills that does this. The other 43 conform.
Why it matters
Agent Skills is portable by design, and the Cursor docs open by describing it as an open standard. In practice this one field stops poteto-mode loading elsewhere.
Verified on Kiro, which loads skills from ~/.kiro/skills/ following the same spec, using two probes to isolate the cause:
| Probe | Frontmatter | Result |
|---|---|---|
| A | conforming name, plus disable-model-invocation, mode, icon, color, reminder |
registers normally, unknown keys ignored |
| B | name with capitals and a space, not matching the folder, no extra keys |
does not register at all |
So the non-standard fields are harmless, and the name value alone is what breaks it. A verbatim copy of poteto-mode does not appear in Kiro's skill menu, and no error is surfaced. It fails silently.
It also fails skills-ref, the reference validator, so a conformance check in CI turns red for a skill that works correctly inside Cursor.
Context
This was introduced deliberately in #149, with the rationale:
The name field is the display label in the slash menu; skill identity and /poteto-mode resolution derive from the folder path, so routing is unchanged.
That holds inside Cursor, and routing is indeed unaffected there. But it treats name as a display label where the docs define it as the identifier, and the cost lands on anyone consuming the skill outside Cursor.
Suggested fixes
Either of these resolves it.
1. Set name: poteto-mode and move the label into metadata, which the spec designates for client-specific extras:
name: poteto-mode
description: ...
metadata:
cursor-display-name: Poteto Mode2. Add skill-level displayName support, mirroring the split Cursor already uses one level up. schemas/plugin.schema.json constrains manifest name to ^[a-z0-9]([a-z0-9.-]*[a-z0-9])?$ and provides a separate free-form displayName. Applying that same pattern to skill frontmatter would give display labels a documented home and let name stay conformant.
For what it is worth, displayName in skill frontmatter is currently inert rather than harmful. I tested it on Kiro and the skill registers with the field ignored, so option 2 would need Cursor-side support to actually do anything.
Secondary question
poteto-mode also uses mode: true and reminder:, neither of which appears in the documented frontmatter table (name, description, paths, disable-model-invocation, icon, color, metadata). Are those supported and undocumented, or leftovers? Not a problem in itself, since unknown keys are tolerated, but it makes the documented field list harder to trust when authoring for portability.
Activity
fix(pstack): make poteto-mode SKILL.md name schema-conformant
dajiaohuang commentedon Aug 30, 2026
A current-main audit shows this is no longer isolated to poteto-mode. pstack/skills/make-bot-ui/SKILL.md now declares name: Make Bot UI while its directory is make-bot-ui (introduced in #271 and retained by #275). The same repository-wide check also finds the X mismatch tracked in #269; that one has a focused fix in #294.
The blocking policy choice is now broader than one skill: should this repository enforce the documented folder/name identifier rule for every SKILL.md (and keep display labels in separate metadata), or intentionally allow Cursor-only display names and document the portability exception? Once that contract is explicit, make-bot-ui can follow the same resolution without adding another competing PR while #239/#240/#241/#257 remain open.
deanrie commentedon Oct 3, 2026
Hey, thanks for the careful probes — they settle the "is it the extra keys or the name" question. Quick status from current main (23e4138): the folder/
namemismatch is now four skills, not one:pstack/skills/poteto-mode→name: Poteto Modepstack/skills/make-bot-ui→name: Make Bot UIthird_party/x/skills/x-api-mcp-guide→name: X MCP guide(X plugin: SKILL.md name "X MCP guide" does not match folder x-api-mcp-guide #269, PR fix(x): align skill name with directory #294 still open)third_party/x-money/skills/x-money-guide→name: X Money guide(new since your report)All other 99 SKILL.md files conform. #382 was closed by its author, so pstack has no open PR for this.
There's also a second cost beyond portability now: the same spaced-name pattern on the agent side is what breaks
spawn_subagenton Grok Build (#483, PR #486 renamesComment Sicko). So "display label inname" is failing on two fronts — spec loaders and at least one Cursor-adjacent harness. I've grouped this with that thread for the pstack maintainer so the folder/name rule gets decided once for the repo rather than skill by skill. Will update here when there's a call.dajiaohuang commentedon Oct 7, 2026
Thanks for the update and for grouping this with the subagent issue — looking forward to hearing the maintainers' call.
niklasbabel commentedon Oct 9, 2026
Another harness data point: T3 Code (Claude Code via the Agent SDK) autocompletes the skill as "/pstack:Poteto Mode" and inserts "/pstack:Poteto" (truncated at the space), which Claude Code can't resolve — so the skill is effectively unusable there. Renaming
name:to the folder name (poteto-mode,make-bot-ui) fixes it; we're carrying that as a local patch until upstream decides.+1 for settling "name = folder name" repo-wide (#239/#240/#241).
notadamhasan commentedon Oct 15, 2026
Another Claude Code data point (desktop app, pstack 0.15.25): the slash menu offers
/pstack:Poteto Mode, but sending it fails with "isn't a command here", so poteto-mode can't be invoked. +1 for #619 sonamematches the folder.sinoda1114 commentedon Oct 17, 2026
Another symptom of this on the Claude desktop app (Code tab): picking /pstack:poteto-mode
from the slash menu and sending it, even with no other text, is refused with
"A command takes file @-mentions but no other @-mentions, slash commands, links,
or inline formatting, so nothing was sent."
The composer checks that a skill chip's display name matches its id. "Poteto Mode"
never matches "pstack:poteto-mode", so the send is blocked. make-bot-ui ("Make Bot UI")
has the same problem. Renaming both to their folder names locally fixes it, which is
what #696 does.