Repository navigation
fix(pstack): let poteto-agent find poteto-mode, drop ignored frontmatter, document the / menu - #597
Merged
Merged
Conversation
Co-authored-by: lauren <poteto@users.noreply.github.com>
Cursor ignores both keys, so the reminder text never reached the model. Co-authored-by: lauren <poteto@users.noreply.github.com>
Co-authored-by: lauren <poteto@users.noreply.github.com>
Co-authored-by: lauren <poteto@users.noreply.github.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 3ddc8d4. Configure here.
…poteto-mode copies match Co-authored-by: lauren <poteto@users.noreply.github.com>
1 task done
mstephenholl
added a commit
to mstephenholl/pstack-claude-codex
that referenced
this pull request
Oct 14, 2026
## Why The daily sync cannot merge cursor/plugins past 56aca54, because upstream's cursor#597 changed the line in `poteto-agent.md` that the port also changed. It reported that in #17. This branch merges upstream at 5108b71 by hand. Closes #17. ## Scope - Merge cursor/plugins@5108b71 with `merge-upstream.py`. In `poteto-agent.md`, take upstream's new fallback for a delegate given no path, and point it at `~/.agents/pstack/skills/poteto-mode/SKILL.md` instead of a search of `~/.cursor/plugins/`. The rest of the line is upstream's word for word. - Port `in-your-own-words`: a `SKILLS` entry, its Codex invocation policy, and a README catalog row. The `ketchup` row follows upstream's shorter replies. - The new `ketchup` asks for charts from Cursor's `/visualize`. `check.py` now knows `/visualize` as a Cursor term, `ketchup` gets the `pstack-harness` pointer, and the harness maps it to a Mermaid diagram or a chart image rendered with a script. - Upstream dropped `poteto-mode`'s `mode` and `reminder` frontmatter, so the harness note about them goes. ## Blast Radius Users get this release on their next `pstack update`: `/in-your-own-words`, the shorter `/ketchup`, a `poteto-agent` that finds `poteto-mode` without a path, and upstream's new root-cause principle line. Until this merges, the upstream sync stays blocked on #17. ## Verification - `check.py` reports 0 problems, and its 2 warnings also appear on `main`. Before the harness commit, it flagged `ketchup` for `/visualize` with no pointer and no mapping. - The unit tests (239), the `poteto-mode` bun tests (58), and `install_test.sh` (54 skills) pass on Linux. - With the install pointed at this branch, headless Claude Code probes, 0 permission denials each: - `poteto-agent` with no path read `~/.agents/pstack/skills/poteto-mode/SKILL.md` and answered with its title. - `/in-your-own-words` played back the goal, the problem, and what it inferred. - `smoke.py --harness claude`: 10/10 pass with the install pointed at this branch (how, why, interrogate, arena, swarm, no-comments, poteto-mode, show-me-your-work, reflect, create-verification-skill). - Codex is not installed on the test machine, so the Codex side did not run.
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.

Summary
pstack skills often do not run. Part of the cause is in Cursor itself: a
/poteto-modetyped as plain text is not attached to the message. That is being fixed in Cursor separately. This PR has only the pstack-side edits that need no decision. The two edits that do need one are listed under Open questions below.Changes
agents/poteto-agent.md: when the parent passes no path, the agent searches~/.cursor/plugins/for a file whose path ends inskills/poteto-mode/SKILL.md. The search is the first step. The agent body also says that the skill catalog hidespoteto-mode, so a missing catalog entry does not mean pstack is absent. If no file matches, the agent stops and tells its parent. The suffix match is not tied to one install layout, which was the problem with thefindfallback in fix(pstack): tell poteto-agent how to find poteto-mode's SKILL.md #569. If more than one copy matches, for example a second version folder in the plugin cache or a copy underlocal/, the agent uses the copy whose.cursor-plugin/plugin.jsonhas the highestversion.skills/poteto-mode/SKILL.md: removemode: trueandreminder:. Cursor ignoresmodeandreminderin skill frontmatter, so the reminder text was never injected. Keeping the keys suggests a behavior that does not exist.README.md: one line that tells users to pick/poteto-modefrom the/menu before they type the task, so Cursor attaches the skill.Open questions for the pstack owner
poteto-modebecome model-invocable? This meansdisable-model-invocation: false, for this one skill only. The investigation behind this PR recommends yes. If yes, the trigger condition from the removedreminder:line can go intodescription.how,why,recall, andketchuptrigger from plain requests? The alternative is that they stay slash-only and their descriptions drop the "Use for ..." routing language. fix(pstack): drop agent-selection language from slash-only skill descriptions #519 and fix(pstack): drop agent-routing language from slash-only skill descriptions #392 already propose that rewording for slash-only skills.disable-model-invocation: true) skills before it applies that limit. A Cursor agent removes them, so onlysetup-pstackfrom pstack is in its catalog. Grok Bot was not tested. If Grok Bot does not remove them, pstack's 51 slash-only skills could fill the 24 places and push outsetup-pstackor skills from other plugins. Catalog text is also truncated to fit a token budget. So this PR does not shorten any descriptions. It is better to size them after this item and questions 1 and 2 have answers.Test plan
poteto-agentwith no path: before and after the change, same prompt. Each run got the agent body as its instructions and the same small read-only task, with no path to the skill. Thepstackfolder was removed from the workspace, so the skill existed only in the installed plugin cache. That is the usual situation on a user's machine. I checked tool calls in the transcripts. The two Grok runs on main searched the workspace first and found nothing. On a user's machine, the workspace is their own repository. The "this PR" rows ran before I added the sentence about choosing between copies. With only one copy on disk, that sentence does not apply.poteto-modeTwo copies on disk: this PR's final text, run twice. I added a second pstack copy next to the installed one. Its files were the same, except that
versioninplugin.jsonwas 0.15.30 instead of 0.15.21. So that a naive pick would fail, the 0.15.30 copy had the older file times and a folder name that sorts after the other copy. Both runs (default model) compared the twoplugin.jsonversions and read only the 0.15.30SKILL.md. As in the runs above, both read the task file in the same step as the search, but read the skill before they started the analysis. I removed the second copy afterward.The runs got the body inside the prompt and did not use the installed
poteto-agenttype. A running session loads agent definitions at startup, so an edited agent file does not reach a spawnedpoteto-agentuntil the next session. I did not test install locations outside~/.cursor/plugins/, and I did not test Windows.Frontmatter: after the edit, the
poteto-modefrontmatter still parses as YAML, with keysname,description,disable-model-invocation,icon, andcolor. Nothing reads the two removed keys, so a before-and-after run would show no difference. On the client side, I searched the agent runtime that ships in this VM: no code readsmodeorreminderas fields. For the server side, I depend on the investigation behind this PR, which quotes Cursor's source. I could not see that code myself.README: not verified. Checking it needs the Cursor desktop composer, and this environment does not have it.
node scripts/validate-plugins.mjspasses.The diff is plain ASCII. The branch merges cleanly with feat(pstack): shorten /ketchup replies and build them on real visuals #595 and fix(pstack): make skill names match their directories (poteto-mode, make-bot-ui) #596.