Skip to content

chore(upstream): merge cursor/plugins - #19

Merged
mstephenholl merged 21 commits into
mainfrom
upstream-merge-17
Oct 14, 2026
Merged

mstephenholl merged 21 commits into
mainfrom
upstream-merge-17

Conversation

@mstephenholl

Copy link
Copy Markdown
Owner

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.

santiagomed and others added 21 commits October 12, 2026 21:43
List unread conversations, then page each one's get_chat_conversation_events newest first and stop at the first event at or below last_read_event_id, the seen_until_sequence_id of the owner's latest read receipt; no parameter starts after an event. mark_chat_conversation_read takes only id and always marks the whole conversation read. Marking a conversation unread does not set unread.
get_chat_conversations now takes up to 1000 per page. Fall back to 100 if the API still rejects 1000.
Keep max_results 1000, events at 100 per page, paging past an empty events page with a next_token, and leaving out the owner's own messages. Drop text the live tools and API already cover: mark-read takes only id, unread is computed by the API, events come newest first with unread ones above last_read_event_id, and no parameter starts after an event.
…essages

X skill: exact unread messages, 1000-conversation inbox pages
For what's unread and for reading or summarizing chats, read only inbox conversations and end with one line offering message requests when meta.has_message_requests is true. Message requests are still read in full when the owner asks about them, and searched when a named person isn't in the inbox.
X skill: unread and chat summaries focus on the main inbox
…ter, document the / menu (cursor#597)

* fix(pstack): let poteto-agent find poteto-mode without a path

Co-authored-by: lauren <poteto@users.noreply.github.com>

* chore(poteto-mode): drop the mode and reminder frontmatter keys

Cursor ignores both keys, so the reminder text never reached the model.

Co-authored-by: lauren <poteto@users.noreply.github.com>

* docs(pstack): tell users to pick /poteto-mode from the slash menu

Co-authored-by: lauren <poteto@users.noreply.github.com>

* chore(pstack): bump version to 0.15.23

Co-authored-by: lauren <poteto@users.noreply.github.com>

* fix(poteto-agent): pick the highest plugin.json version when several poteto-mode copies match

Co-authored-by: lauren <poteto@users.noreply.github.com>

* chore(pstack): drop version bump

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
cursor#602)

* feat(pstack): add /in-your-own-words to play back the goal before work

* chore(pstack): bump to 0.15.24

* refactor(pstack): tighten /in-your-own-words

* refactor(pstack): cut /in-your-own-words to the core

* refactor(pstack): reduce /in-your-own-words to one line

* chore(pstack): drop version bump

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
…cursor#595)

* feat(pstack): shorten /ketchup replies and build them on real visuals

Cap the reply text at 250 words, with Markdown tables counted as text.
Show what happened in one status visual with at most three one-line
results, give each action item in three lines, and put each item's
options and costs in a before-and-after visual. Define a visual as a
picture, so a Markdown table no longer counts as one.

Bump pstack to 0.15.22.

* fix(pstack): keep /ketchup's number check and missing-screenshot mark

Check each number the reply shows against its source and say when one is
corrected. Put a visible change that has no screenshot in the status
visual, marked "No screenshot yet", so the result cap cannot drop it.

* chore(pstack): drop version bump

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
… dig (cursor#604)

* feat(pstack): propose a cheap always-on signal after a deep debugging dig

* chore(pstack): drop version bump

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
…lem (cursor#606)

* refactor(pstack): reword /in-your-own-words around goals and the problem

* chore(pstack): bump to 0.15.23

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* refactor(pstack): make /ketchup read like /bro in 150 words

Co-authored-by: lauren <poteto@users.noreply.github.com>

* refactor(pstack): name the on-screen change and keep irreversible steps in /ketchup

Co-authored-by: lauren <poteto@users.noreply.github.com>

* fix(pstack): keep /ketchup on /bro's voice and fit unasked irreversible steps into the reply format

Co-authored-by: lauren <poteto@users.noreply.github.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Resolve the conflict that merge-upstream.py left for a person:

- Take upstream's new fallback in `poteto-agent.md` 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.
Add it to SKILLS, give it the Codex invocation policy its disable-model-invocation frontmatter needs, and list it in the README catalog. Update the ketchup row to upstream's shorter replies.
check.py now knows /visualize as a Cursor term, so a ported skill that uses it needs the pstack-harness pointer and a harness mapping. ketchup gets the pointer, and the harness maps /visualize to a Mermaid diagram or a scripted chart image. Upstream dropped poteto-mode's mode and reminder frontmatter, so the harness note about them goes too.
@mstephenholl
mstephenholl merged commit abf534d into main Oct 14, 2026
11 checks passed
@mstephenholl
mstephenholl deleted the upstream-merge-17 branch October 14, 2026 02:21
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.

Upstream cursor/plugins needs a manual merge

5 participants