Skip to content

chore: sync with cursor/plugins — chore(pstack): bump to 0.15.28, sync guide with create-formal-verification-skill (#724) - #60

Merged
SmailG merged 164 commits into
mainfrom
sync/manual-2026-10-19
Oct 19, 2026
Merged

SmailG merged 164 commits into
mainfrom
sync/manual-2026-10-19

Conversation

@SmailG

@SmailG SmailG commented Oct 19, 2026

Copy link
Copy Markdown
Owner

Upstream changes

Run by hand: the scheduled sync has failed since Oct 6. #59 fixed the conflict, but this range includes upstream 182f2ce, which changes .github/workflows/validate-plugins.yml, and GITHUB_TOKEN cannot push that. Once this lands, scheduled syncs push again until upstream next changes a workflow file. From then on they need the SYNC_TOKEN secret.

Same steps as sync-upstream.yml: merge, conflict resolution (ours for marketplace.json/README.md, upstream for the rest), sync manifests, rebuild README, update .upstream-base. The gate passed: converter tests 112/112, validate-plugins.mjs, generate-pstack-harness-trees.mjs --check.

d457567 chore(pstack): bump to 0.15.28, sync guide with create-formal-verification-skill (#724)
7b353f7 pstack: add maintain-formal-verification-skill (#716)
6b78e9f fix(pstack): add TLA+ default and no-verifier fallback to create-formal-verification-skill (#721)
8838150 Merge pull request #720 from cursor/liam-ilan/meta-ads
0f16be8 feat(third_party): add Meta Ads plugin
8ad8a41 Merge pull request #717 from staugaard/staugaard/zoom-client-secret-copy
f9be7aa pstack: offer formal verification in setup, sync help and guide (#715)
9c1de27 zoom: require Client Secret with Client ID (1.0.2)
0148b78 chore(pstack): bump to 0.15.27 (#713)
75fabac pstack: drop the rewritten-prompt ban from sharpen (#712)
0b8e952 chore(pstack): bump to 0.15.26 (#710)
4382e68 feat(pstack): add /create-formal-verification-skill (#709)
bc14437 fix(pstack): say outright that ketchup never cuts items to stay under a word count (#708)
16541c6 fix(pstack): list every waiting item so each ketchup call is decidable (#692)
d1715e0 Merge pull request #706 from cursor/eliu/google-ads-plugin
ad26795 Merge pull request #697 from cursor/minu/plugin-gopuff
011b0d7 Add the Google Ads plugin backed by Cursor's REST MCP translator
019a6a2 pstack: refresh the docs and add a docs-vs-tree check (#704)
1b80080 fix(pstack): close three gaps in the Claude Code plugin (#705)
a968159 fix(pstack): name every skill after its folder (#702)
3098b7d docs(gopuff): match README table row to listing description
0317eb8 fix(pstack): make a brand with a type guard, not as (#700)
719e4de feat(third_party): add Gopuff plugin
101b274 Merge pull request #695 from cursor/eliu/tailscale-company-tailnet-copy
572fe39 tailscale: sync the listing description in marketplace.json and the READMEs
956aee2 tailscale: cover the company tailnet in the description and setup skill
09d06eb Merge pull request #694 from cursor/liam-ilan/zoho
86ea94c Merge pull request #693 from djiang-jq/cursor/quickbooks-online-native-mcp-reland-2-fbc4
87635c8 feat(third_party): add Zoho CRM, Zoho Desk, and Zoho Books plugins
ac4e25a Merge pull request #690 from cursor/liam-ilan/gusto
61e15b5 feat(third_party): use Gusto g mark as logo
da137a8 feat(third_party): add Gusto logo
369321e feat(third_party): add Gusto plugin
2284d64 Merge pull request #691 from cursor/liam-ilan/tiktok-for-business
0096d94 feat(third_party): add TikTok for Business plugin
cdb3c41 Merge pull request #654 from cursor/pvann/x-scheduled-calls
fcbb736 Treat scheduled X calls as free and sync the plugin listing.
182f2ce feat(pstack): install pstack in Claude Code from a generated tree (#637)
58994c6 Request calls scopes and document scheduled-call tools.
052c590 feat(quickbooks-online): declare Intuit's HTTP MCP server
2f83774 Merge pull request #651 from cursor/revert-650-cursor/quickbooks-online-native-mcp-reland-fbc4
1348397 Revert "feat(quickbooks-online): declare Intuit's HTTP MCP server"
871b276 Merge pull request #650 from djiang-jq/cursor/quickbooks-online-native-mcp-reland-fbc4
4d5a919 feat(quickbooks-online): declare Intuit's HTTP MCP server
f713f14 Merge pull request #643 from cursor/revert-642-cursor/quickbooks-online-native-mcp-json-fbc4
ed4397c Revert "quickbooks online native mcp"
f13e501 Merge pull request #642 from djiang-jq/cursor/quickbooks-online-native-mcp-json-fbc4
f506741 docs(quickbooks-online): tighten the MCP section wording
5c096d2 feat(quickbooks-online): declare Intuit's HTTP MCP server
99743e9 refactor(pstack): cut marginal sections from four skills (#634)
e5136d8 pstack: restate four overspecified principles as reasoning, not rules (#633)
850d7f2 Merge pull request #632 from cursor/liam-ilan/whatsapp-business
9729a65 feat(third_party): add WhatsApp Business plugin
6ce45c5 chore(pstack): bump to 0.15.25 (#614)
afd51cf feat(pstack): have /ketchup explain changes with screenshots, videos, and diagrams (#628)
55345a9 Merge pull request #631 from cursor/liam-ilan/finary
a8df8d5 feat(third_party): add Finary plugin
1e5c90a chore(pstack): bump to 0.15.24 (#617)
79afd75 feat(pstack): add /sharpen (#615)
8043881 pstack: autopilot loops catch the operator up with /ketchup (#616)
ce649c0 feat(pstack): match subagent effort to the job, drop Graphite from orchestrate, and cut playbooks to principles (#613)
837067b Merge pull request #612 from djiang-jq/cursor/highlevel-cursor-endpoint
9b079e3 feat(highlevel): use HighLevel's Cursor MCP endpoint
5108b71 Merge pull request #610 from djiang-jq/cursor/highlevel-plugin
e06323e feat(third_party): add HighLevel plugin
c86f349 refactor(pstack): make /ketchup read like /bro in 150 words (#609)
dbf4981 refactor(pstack): reword /in-your-own-words around goals and the problem (#606)
3177dab chore(pstack): bump to 0.15.22 (#605)
36cecbf feat(pstack): propose a cheap always-on signal after a deep debugging dig (#604)
d00ba6e feat(pstack): shorten /ketchup replies and build them on real visuals (#595)
7d8d909 feat(pstack): add /in-your-own-words to play back the goal before work (#602)
b93e811 fix(pstack): let poteto-agent find poteto-mode, drop ignored frontmatter, document the / menu (#597)
1dcc2ba Merge pull request #594 from santiagomed/x-mcp-media-write
7d368e1 X plugin: request media.write scope
7845807 Merge pull request #591 from santiagomed/x-skill-main-inbox-focus
ebf8930 X skill: unread and chat summaries focus on the main inbox
fe53d9e Merge pull request #588 from santiagomed/x-skill-exact-unread-messages
c223347 X skill: restore the unread stop rule and the mark-read and mark-unread notes
56aca54 Merge pull request #533 from cursor/minu/tailscale-plugin
78bf6cc X skill: trim to the inbox page size and unread paging
4316956 feat(third_party): add Tailscale plugin for Grok Bot
bebaffe X skill: list the inbox with max_results 1000
118e73b Merge pull request #590 from djiang-jq/cursor/workday-team-api-client
e64b0e2 docs(workday): document the team API client and required TOKEN_ENDPOINT
df9d1bd X skill: exact unread messages, mark-read covers the whole conversation
997ffc7 chore(pstack): bump to 0.15.21 (#584)
364a77e fix(pstack): tell agents where bundled leaf skills live (#577)
600daea X skill: built-in reads, unread state, no congrats line (#580)
1b6d44f chore(pstack): bump to 0.15.20 (#581)
c49b37a fix(pstack): create-verification-skill readiness means the app is usable (#573)
e5a02f8 feat(pstack): add Agent Plugins v1 root manifest (#576)
2bd5dd4 fix(pstack): make the /poteto-mode chat the runner, poteto-agent a delegate (#575)
cf9a111 fix(pstack): worktree-audit checks MERGED against the default branch, not origin/main (#574)
bc697d0 fix(pstack): drop "Must always apply." from unslop description (#572)
ff8f83d fix(watch-pr): paginate review threads instead of reading only the first 100 (#484)
87c8103 fix(pstack): respect fenced code blocks in plan checks (#536)
de2dba6 fix(pstack): rename Comment Sicko agent id so Grok can spawn it (#486)
08bd59b refactor(pstack): cut unneeded sections from seven skills (#571)
ea32d95 feat(pstack): show /ketchup decisions as before/after visuals (#570)
11713c6 Merge pull request #543 from santiagomed/cursor/x-encryption-status-quiet-2f0c
51fd619 Focus X Chat summaries on the message
574409c Don't surface per-message X Chat encryption status
9d76bca Merge pull request #542 from santiagomed/cursor/x-remember-key-question-0c2f
3f2474f Ask about remembering the X Chat key as a separate question
4bf3e08 Merge pull request #541 from santiagomed/cursor/xchat-legacy-dms-fe3c
e39c24f Say an edit row is the current text of its target message
061be1c Remove duplicate mercury plugin (#540)
fd6b46c Use list message-request events only when the request was not paged
9421ece Say X Chat reads and key lookups are free in Grok Bot and Cursor
d344072 Say that a stale saved X Chat key falls back to the PIN
c3d7ae5 Read every X Chat thread and message request
3cd61d4 Say "X Chat is free for this plugin."
8333fed Bump the X plugin to 2.6.0 for remembering the X Chat key.
10e5f06 Offer to remember the X Chat key when asking for the PIN
69ae56f Treat X Chat as free and read threads in full
87d4af7 Describe X Chat decrypt as accepting every event
978ca6e feat(pstack): add /ketchup skill (#539)
00b14f1 refactor(pstack): distill skill prompts to cut tokens (#538)
c7917b6 Verify X Chat per event and fetch every sender's keys in the X MCP guide
fc5dc2b Bump the X plugin to 2.5.2 for unencrypted X Chat reads.
a029cf8 Read unencrypted X Chat messages in the X MCP guide
d73344b Merge pull request #534 from djiang-jq/cursor/square-plugin
833ac55 feat(third_party): add Square plugin
ccb5507 Merge pull request #521 from cursor/minu/salesforce-headless-360-plugin
ddcde50 feat(third_party): add Salesforce Headless 360 plugin
d0ef80d Merge pull request #518 from djiang-jq/cursor/workday-plugin
6060c2c feat(third_party): add Workday plugin
9f451cf Merge pull request #512 from djiang-jq/cursor/quickbooks-online-plugin
4d4248b feat(third_party): add QuickBooks Online plugin
df58112 feat(pstack): drop Sol, default to Opus xhigh and Grok (#511)
1e56b29 feat(pstack): have /poteto-help ask about /setup-pstack when no model rule exists (#509)
e5a8186 Merge pull request #480 from hkaur030/codex/statsig-mcp-v3
77526ff Merge pull request #423 from anikser/ali/cursor/origin-apps-plugin-05cb
2cbf585 docs(pstack): refresh guide for /correct, checklist, prompting tips (#508)
807c031 feat(pstack): add prompting references to /poteto-help (#507)
00b52d9 fix(pstack): make /poteto-help typed-only (#506)
742e96e Update Statsig plugin to MCP v3
0390402 State the mirror rule as native versus GitHub mirror
277537c Drop the where-to-look table; llms.txt already indexes those sections
5dda504 Describe doc access without naming tools; save specs outside the repo
551b37a Doc-access eval: no plain reads of the big files; mirrors are not merge targets
7624c3f Keep forge and fan-out
14989dd Download the spec to disk and search it; never read it whole
74af145 Plain-language pass over the skills and README
2b2734d Slim the plugin to two skills and one reference; apply eval fixes
f181779 Name docs sections by heading instead of hardcoding page URLs
e7f7503 Point at per-section reference pages
a8da80c Brief template becomes guidance; four optional marks; feedback file
32bbb4e Final pass: partner audience, use-case feedback, guidance not procedure
6490acc Rename gap cards to feedback for Cursor
0a71c0c Address review: drop porting/integration keywords, add envelope outcome
ecb8304 Frame gap cards and questions as feedback Cursor wants
89b461d Drop the spec indexer; llms-full.txt already expands nested fields
db4e4ee Retire by-design-absent; relax roadmap absolutes
06ad1fa Keep GitHub differences in the porting skill only
bfd034d Point at the new docs anchors
3992065 Point at the Origin docs instead of restating them
3bd5434 Keep only payload-field indexing in the script; cut internal context
cc90692 Apply skill-authoring audit picks
e97c83e Unslop pass over skills, references, README, and manifests
a2f9147 Slim both skills to their behavior-changing core
e0efb7a Add origin-api skill; porting skill builds on it
9a9ea84 Add origin-apps plugin: port a GitHub App to an Origin App

cursoragent and others added 30 commits September 23, 2026 21:30
Adds the Origin Apps plugin with one skill, port-github-app-to-origin, which
discovers a GitHub App's surface from its codebase, maps it onto the live
Origin OpenAPI spec (x-origin-scopes / x-origin-webhook-events), and writes a
porting brief. Planning only; it writes no code.

Dual-layout packaging so partners can use it outside Cursor: root plugin.json
(Agent Plugins 1.0), .cursor-plugin/plugin.json (Cursor Marketplace), and
.claude-plugin/plugin.json (Claude Code). Adds a root
.claude-plugin/marketplace.json so `/plugin marketplace add cursor/plugins`
works in Claude Code; it lists only this plugin.
origin-api is the general skill for anyone building on the Origin API:
it points at the live docs and OpenAPI spec first and carries only the
practices that hold across spec versions (credentials and token minting,
minimal scopes from x-origin-scopes, webhook subscription, v1ed
verification, idempotent handling and delivery behavior, opaque page
tokens, TypeIDs, error envelope, rate limits, deliberate differences from
GitHub). port-github-app-to-origin now defers to it for fundamentals and
keeps only discovery, mapping, brief, and gap cards.

Manifests, marketplace entries, README row, and CHANGELOG describe both
skills with one identical description string.

Co-authored-by: ali.nikseresht <[email protected]>
origin-api becomes a fetch-first source list plus a gotcha checklist
(173 -> 80 lines). The porting skill keeps the discover -> fetch -> map ->
brief workflow and the gap-card rules; references drop ecosystem grep
lists, path examples, calibration examples, and everything that restated
the spec or origin-api. origin-isms is now a classification table
(GitHub surface -> label -> Origin idiom). 1231 -> 567 prose lines.

Co-authored-by: ali.nikseresht <[email protected]>
Wording only. Removes em dashes, connector colons, semicolon chains, and
passive voice; replaces "surface" with the concrete noun; one thought per
sentence. Rules and content unchanged. Plugin description is one new
identical string across the three manifests, both marketplace entries,
and the README row.

Co-authored-by: ali.nikseresht <[email protected]>
Porting skill gains step 6, a copyable check-and-fix list run before the
brief is declared done. Both descriptions are third person. The porting
reference table names the origin-api skill instead of a relative path.
brief-template gets a contents line. gap-bar drops "today". "PR" becomes
"pull request" in prose.

Co-authored-by: ali.nikseresht <[email protected]>
index-origin-spec.py drops the ops and scopes modes, which two rg
one-liners cover, and keeps events and schema (payload fields with $ref
resolution). Constants are named; missing file, invalid YAML, and
non-Origin specs exit with a message instead of a traceback.

Prose loses process history and internal justifications: the validation
run note in step 6, "Cursor owns the shape", the manifests paragraph in
the README, and the CHANGELOG iteration notes.

Co-authored-by: ali.nikseresht <[email protected]>
origin-api becomes a fetch-first list, a where-to-look table of
llms-full.txt anchors, four priority rules, and a short coming-from-GitHub
list for facts the docs do not carry yet. origin-isms rows point at docs
anchors instead of restating the idiom. spec-mapping drops copied paths
and slugs and the x-origin-webhook-resource extension, which the current
spec does not have; x-cursor-visibility is corrected to a field badge.
brief-template's mirror rule and hello-world mechanics defer to the docs.
gap-bar and README drop a feedback address the docs do not name.

Co-authored-by: ali.nikseresht <[email protected]>
The docs now carry coming-from-github, ids, preview, and the x-origin-*
summary, so the in-skill Coming from GitHub list becomes a pointer, ID
form points at #ids, PREVIEW points at #preview without claiming where the
badge appears, and the subscription and pageSize rules defer to #events
and #pagination.

Co-authored-by: ali.nikseresht <[email protected]>
The docs will not carry a coming-from-github section, so origin-api
points at the porting skill in one line and origin-isms rows name the
Origin answer or its docs anchor directly. The payload-field rule lives in
the porting mapping step and points at the per-field notes under
#event-payloads.

Co-authored-by: ali.nikseresht <[email protected]>
origin-isms rows are reshaped where the docs give a path and
not-available where the current spec has nothing; not-available always
carries a question and goes through the gap bar. Rows now cite documented
limitations instead of asserting intent, and two factual fixes land:
reviewer identifiers resolve by email or group slug, and app-level event
subscriptions are the documented webhook path. Related sentences in the
porting SKILL, gap-bar, brief-template, spec-mapping, README, and
origin-api drop "deliberate", "on purpose", and "never a gap".

Co-authored-by: ali.nikseresht <[email protected]>
The docs render every webhook payload family and every endpoint's
response fields with nested objects expanded to dotted paths, deeper
than the script's two-level expansion, so the script and its PyYAML
requirement go. spec-mapping points the REST and payload-field steps at
the matching llms-full.txt headings. origin-api gains a lookup-order rule
(llms.txt first, one section for a narrow question, full files only for
broad work); the porting skill inherits it.

Co-authored-by: ali.nikseresht <[email protected]>
gap-bar opens with the ask to raise anything that blocks, costs, or would
help the team; the bar orders cards versus questions rather than deciding
whether to speak up. Drops the product-area examples for undocumented
concepts, softens "never about search" and "fails the bar", and closes by
encouraging the team to send cards and questions. The same tone sweep
touches the porting SKILL, spec-mapping, origin-isms, brief-template, and
README.

Co-authored-by: ali.nikseresht <[email protected]>
Manifests lose the porting and integration keywords and tags.
spec-mapping's payload outcomes now include "present in the envelope" so
GitHub's action field maps to event.type instead of falling through to
the gap bar, matching the brief template's five How values. The porting
skill's out-of-scope line says the team sends the cards.

Co-authored-by: ali.nikseresht <[email protected]>
The brief's section is Feedback for Cursor with Feedback: entries; the
reference is the feedback bar and format. The gap parity label stays: a
gap row produces a feedback entry. Section 7 is scoped to decisions the
team must make so it does not duplicate section 6.

Co-authored-by: ali.nikseresht <[email protected]>
Feedback for Cursor now carries only the use case and the API gap in
Origin terms, with no file paths, module names, framework internals, or
repository names; the team strips internals before forwarding. The
porting skill states it does not write or change code without an explicit
ask, its procedure is guidance with a short self-check, and the brief is a
default template whose Feedback section is the part to keep exact.
origin-api is a router: docs pointers and five rules, triggered by Origin
mentions only. Capability tables and payload maps use neutral "today"
framing instead of GitHub-versus-Origin.

Co-authored-by: ali.nikseresht <[email protected]>
brief-template.md describes what a good brief does and offers a default
outline the agent adapts or skips, with a small app's brief fitting one
screen. Fixed question lists, column counts, and boilerplate sections are
gone; what remains is what makes the brief trustworthy: evidence for app
claims, Origin claims resolved against the fetched docs, feedback free of
partner internals. unknown folds into not-available; same and reshaped
fold into maps; the four marks are optional vocabulary. Feedback for
Cursor stays last and is also written to ORIGIN-FEEDBACK.md when there is
at least one entry.

Co-authored-by: ali.nikseresht <[email protected]>
Every docs pointer becomes reference/<anchor>.md under the Origin docs
base URL. origin-api's lookup rule is llms.txt first, then the one page;
llms-full.txt and openapi.yaml stay for broad work. The field-map steps
fetch the endpoint's or payload family's own page, with rg over
llms-full.txt kept as the broad-run fallback.

Co-authored-by: ali.nikseresht <[email protected]>
Pointers become quoted section headings resolved through llms.txt at run
time, so the skill does not depend on a docs deploy order and survives
renamed anchors. The base URL stays for llms.txt, llms-full.txt, and
openapi.yaml.

Co-authored-by: ali.nikseresht <[email protected]>
Folds discovery, spec-mapping, gap-bar, origin-isms, and brief-template
into the porting SKILL.md plus one reference (brief, feedback bar, crib);
the eval scored this shape level with the longer one. Also from the eval:
the mirror rule states facts (merging and default-branch changes are
native-only; on a GitHub-sourced mirror every event except
repository.pushed arrives and calls beyond metadata and contents reads
return 403); brevity is structural (list only what does not map straight
across, payload fields only when absent or a follow-up read, a word
budget by app size); a three-line filter sits before feedback; the stale
user-OAuth item points at "Acting on behalf of users" and names the
user-token permission probe as a workaround; ORIGIN-FEEDBACK.md carries no
license header, repo or product name, or other forge, and docs
contradictions go to Cursor.

Co-authored-by: ali.nikseresht <[email protected]>
Wording only. "Crib" becomes "Where GitHub features live on Origin";
"the bar", "first-run path", "marks", "provenance", "fan-out", "rows",
"call families", and "payload family" become ordinary words; native
repositories and stable outbound mirrors are explained once in plain terms;
optional table labels are plain words. Rules, eval fixes, and the
section-name pointers are unchanged.

Co-authored-by: ali.nikseresht <[email protected]>
openapi.yaml and llms-full.txt are about 870 KB and 575 KB, roughly 350k
tokens together, more than a context window holds. Both skills now say to
curl them to disk and rg them, reading only the matching sections. Narrow
questions still go through llms.txt to the one section.

Co-authored-by: ali.nikseresht <[email protected]>
Co-authored-by: ali.nikseresht <[email protected]>
Replaces the curl and rg commands with tool-neutral intent (save locally,
search for the heading or annotation, read the matching part) and keeps
the concrete search targets. Saved copies go in a temporary location
outside the app's repository, so a download cannot overwrite or litter the
working tree.

Co-authored-by: ali.nikseresht <[email protected]>
Every row mapped a question to a section whose title in llms.txt says
the same thing, or to a section a ranked rule already names. The one
mapping the index does not make obvious (stale check-run posts are under
"Ordering writes") stays as a single line.

Co-authored-by: ali.nikseresht <[email protected]>
Outbound mirrors are not externally shipped, so the skills no longer
mention them. Native repositories get full scopes and every write; on a
GitHub mirror every event except repository.pushed arrives, calls beyond
metadata and contents reads return 403, and merge and default-branch
changes are not available.

Co-authored-by: ali.nikseresht <[email protected]>
## Why
`/poteto-help` loaded from its description, so that description sat in the skill list of every session. This PR makes the skill typed-only, like every other pstack skill except `/setup-pstack`. It reverses the description-loading choice in cursor#502.

## What changed
- `pstack/skills/poteto-help/SKILL.md` sets `disable-model-invocation: true`. The description now tells the user to type `/poteto-help` with a question.
- The README row and two lines in the skill body said that `/poteto-help` loads by itself. Now the README says that it runs only when typed, and the skill says that only `/setup-pstack` loads from the user's words.
- Bump pstack to 0.15.11.

## Scope
- `/setup-pstack` still loads from its description.
- The rest of the skill body does not change.

## Tradeoffs
- A user who asks how to use pstack without the command no longer gets this skill. The README and the guide index still tell new users to type `/poteto-help`.

## Blast Radius
The skill list in every session loses one description. cursor#502 measured it at 72 tokens. Typed use does not change.

## Verification
- A check script passes 11 of 11 on this branch. On main, it fails the 6 checks that this PR targets. It also runs `quick-validate.mjs`, `lint-skill-frontmatter.mjs`, and `scripts/validate-plugins.mjs`.
- In the Cursor CLI, with the skill installed in a scratch project, the old skill loaded on 5 of 7 runs of pstack help questions. The new skill loaded on 0 of 7. A typed `/poteto-help` question still loaded the new skill, and the answer followed its rules.
…ursor#508)

* docs(pstack): teach prompting and supervision habits in guide pages 2-4

Page 2 gains what to put in and leave out of a prompt, the restate-first
habit for noisy reports, and cloud subagents for parallel work. Page 3
adds the Investigation playbook, /teach on the agent's own trade-offs,
and /recall before new input. Page 4 adds prototyping instead of
debating, README-first design, and plans written after the design
settles.

Co-authored-by: lauren <[email protected]>

* docs(pstack): teach verification-first habits and /benchmark-checklist

Page 1 urges new users to accept the verification skill and adds cost
controls. Page 5 links the perf playbooks to /benchmark-checklist and
adds the runtime and trace forensics playbooks. Page 6 adds artifacts as
proof, a /benchmark-checklist section, verify-skill prompts, the control
CLI traits, and daily maintenance. Page 8 links the checklist from
Explain the Number and expands Build the Lever.

Co-authored-by: lauren <[email protected]>

* docs(pstack): add trust-first loops, Projects, and automations to page 7

Adds the four checks a loop must pass before it runs alone, the Pause
safely playbook, a section on running many Cursor Projects with
cloud subagents and poteto-mode, and loops that start themselves via
the dormant benny automation pack.

Co-authored-by: lauren <[email protected]>

* docs(pstack): teach /correct, skill eval habits, and /make-bot-ui on page 9

Adds the fix-the-environment ranking and a /correct section, start-small
advice, the update-and-eval prompt for skill edits, and a short
/make-bot-ui section. Page 8 links Encode Lessons in Structure to
/correct.

Co-authored-by: lauren <[email protected]>

* docs(pstack): expand /poteto-help, recipes, and pitfalls

The guide index now explains what /poteto-help does and does not do,
and the page summaries name the new content. Page 10 adds recipes for
restating a report, prototyping, planning, repro with proof,
/benchmark-checklist, /correct, and /poteto-help, plus pitfalls for each
habit.

Co-authored-by: lauren <[email protected]>

* docs(pstack): describe Pause safely triggers as the playbook does

The playbook fires on any explicit pause, going offline, or a restart,
not one exact phrase.

Co-authored-by: lauren <[email protected]>

* chore(pstack): bump version to 0.15.13

Co-authored-by: lauren <[email protected]>

---------

Co-authored-by: Cursor Agent <[email protected]>
poteto and others added 21 commits October 17, 2026 16:11
* fix(pstack): fail the harness generator when a skill name is not its folder

Cursor runs a skill by its folder name. Claude Code lists it by its
frontmatter `name`, so a skill named `Poteto Mode` shows up as
`/pstack:Poteto Mode`, which parses as the unknown command `/pstack:Poteto`.
The Agent Skills spec requires the two to match and limits them to lowercase
words joined by hyphens, at most 64 characters.

The generator now fails on any pstack skill that breaks that rule. CI runs it
with --check. This commit fails on `make-bot-ui` and `poteto-mode`; the next
commit renames them.

* fix(pstack): name every skill after its folder

`make-bot-ui` and `poteto-mode` had the display names `Make Bot UI` and
`Poteto Mode` in their frontmatter. Claude Code listed them as
`/pstack:Make Bot UI` and `/pstack:Poteto Mode`, which cannot run, and Cursor
warned that the name did not match the folder. The fix is in the source, so
Cursor, Claude Code, and the generated tree all read the same name and the
generator needs no per-harness rewrite.

Every skill was renamed by this script, run from the repository root. It
changes only the two skills whose name differed:

  node -e 'const fs=require("fs");for(const d of fs.readdirSync("pstack/skills")){const p=`pstack/skills/${d}/SKILL.md`;if(fs.existsSync(p))fs.writeFileSync(p,fs.readFileSync(p,"utf8").replace(/^(---\n[\s\S]*?^name: ).*$/m,`$1${d}`))}'
  node scripts/generate-pstack-harness-trees.mjs

---------

Co-authored-by: Cursor Agent <[email protected]>
* fix(pstack): write Claude Code model choices to ~/.claude/rules

Claude Code never read pstack-models.mdc, so /pstack:setup-pstack stopped
without writing anything. Claude Code loads every .md file in
~/.claude/rules/ into each new session, so the adapter now maps the model
rule to ~/.claude/rules/pstack-models.md, tells setup-pstack how to detect
models from the Agent tool and write that file, and maps a role value such
as "opus high" to Agent model and effort.

* fix(pstack): skip Cursor-only steps in Claude Code with a one-line note

A step that needs Cursor Automations, Bugbot, a Cursor cloud agent, or the
built-in PR tool now writes "Skipped in Claude Code: <step>. <reason>."
and goes on, leaving a named placeholder when a later step needs its
output. The adapter maps each feature, and the generator's term list now
catches "built-in PR tool" so a skill that names it must have a row.

* fix(pstack): ship the guide and README in the Claude Code tree

/pstack:poteto-help linked the README and guide on GitHub main, so Claude
Code asked for WebFetch permission to answer. The generator now copies
pstack/docs/guide and pstack/README.md into the tree, so --check catches
drift in them, and their links to each other resolve locally. The adapter
maps a GitHub main link to a pstack file to the local copy when the tree
ships it.

---------

Co-authored-by: Cursor Agent <[email protected]>
* feat(pstack): add a check that diffs the docs against the skill tree

scripts/check-pstack-docs.mjs lists pstack's skills, playbooks, and agents
from the tree. It checks pstack/README.md and pstack/docs/guide for unknown
or renamed slash commands, broken relative links and anchors, whole-set
counts, unknown subagent types, model names that setup-pstack does not use,
and skills, playbooks, or agents missing from the README tables.

* docs(pstack): fix stale claims about autopilot, custom modes, and the harness

* pstack docs: plain-language pass on the guide and README

Remove idioms, metaphors, comma splices, and mid-sentence colons that
the technical-writing and unslop standards flag. No claims change.

* docs(pstack): drop an unbacked claim about custom mode turns

* docs(pstack): regenerate the Claude Code tree for the docs pass

The Claude Code tree now ships pstack/README.md and pstack/docs/guide/, so the docs-pass edits to those files need regenerated copies for --check to pass.

* fix(pstack): check links that carry a title in check-pstack-docs

The link pattern needed ')' right after the target, so [x](a.md "title") and [x](<a.md>) were never checked and a broken one passed.

---------

Co-authored-by: Cursor Agent <[email protected]>
feat(third_party): add Gopuff plugin
Add the Google Ads plugin (Grok Bot, REST MCP)
cursor#692)

* fix(pstack): list every waiting item so each ketchup call is decidable

The 150-word cap and the two-line action item made the model fold a set
of PRs into a count and send the rest of the calls to a linked file.
Give each item its own bullet with its link, user change, evidence,
risk, and pick, and let the reply grow with the item count. Keep
structural diagrams and ban status and action-item diagrams.

* fix(pstack): name the PR in every ketchup call and give each item's risk

The model named three PRs by title only, asked calls between options
without the PR number, and left out the risk on low-risk merges. Ask
for the number or link in every call, and for each item's risk even
when it is low.

* fix(pstack): keep small ketchup replies short while every batch item stays decidable

A call about one item is one bullet with the item named once. A call
between options takes its risk from the options' costs. Say what
waiting costs only when it is more than a delay, and size the reply by
item count so a two-call chat stays well under 150 words.

* docs(pstack): match the README's ketchup row to the new behavior

The row still promised a few plain sentences. Ketchup now lists every waiting item, so a large batch makes a long reply.
… a word count (cursor#708)

The old sentence said not to shrink items to fit. Name cutting items as well, and the word count they must not be cut to meet.
* feat(pstack): add /create-formal-verification-skill

Generates a project-local skill that formally verifies one property of the
code where a bug costs the most and tests reach the least. The skill picks
the verification tool from the question instead of prescribing one.

* docs(pstack): list /create-formal-verification-skill in the README and poteto-help

* chore(pstack): regenerate the Claude Code tree for /create-formal-verification-skill

* fix(pstack): let the formal verification handoff proof keep real findings

The proof step said everything must pass again after the scratch change is dropped, and to fix the skill or the verification when a step fails. When the current code already breaks the property, that pointed the agent at weakening the check. Accept a baseline that fails only on findings the agent will report, and limit the fix-it fallback to a missed break or a step that does not run.
Removes the sentence "Don't hand back a rewritten prompt." from the sharpen skill and regenerates the Claude Code copy, mirroring everysphere #1147012.
…or#715)

* feat(pstack): offer /create-formal-verification-skill in /setup-pstack

Ask once at the end of setup whether the user wants a formal
verification skill, unless the project already has one. On yes, run
/create-formal-verification-skill. The offer matches the existing
/create-verification-skill offer.

Co-authored-by: lauren <[email protected]>

* Sync poteto-help and the pstack guide with shipped skills

Document /create-formal-verification-skill, the setup-pstack formal
verification offer, /ketchup, /sharpen, /in-your-own-words, the Claude
Code install, the Opening a PR playbook, the verification skill Helpers
section, and Babysit's Origin path.

Co-authored-by: lauren <[email protected]>

* Regenerate the Claude Code pstack harness tree

Co-authored-by: lauren <[email protected]>

---------

Co-authored-by: Cursor Agent <[email protected]>
…cret-copy

zoom: require Client Secret with Client ID (1.0.2)
…al-verification-skill (cursor#721)

The event-order sentence names TLA+ as the default in any language, and
the sentence that recommended TLA+ for concurrent and distributed
designs is gone. When no verifier runs on the language, the agent says
so and tests the real code with generated inputs, not a hand model of
the function.

The new paragraph is the exact text that a preregistered eval tested.

Co-authored-by: Cursor Agent <[email protected]>
* Record covered code and sync commit in formal verify skills

create-formal-verification-skill now writes, into the generated verify skill,
which files and functions each check covers and the commit at which the
verification was last confirmed to describe them, so a later agent can see
when covered code has changed since.

Co-authored-by: lauren <[email protected]>

* Add maintain-formal-verification-skill

Upkeep loop for a formal verify skill: read the commits that touched covered
code since the recorded sync commit, update the model, harness, or properties
from the code, rerun, prove each updated check can still fail, and report each
check as in sync, updated, bug, or blocked. Listed in the README and in the
poteto-help routing table.

Co-authored-by: lauren <[email protected]>

* Find the formal verify skill by what it does, not by name

create-formal-verification-skill gives the generated skill no fixed name, and
setup finds it by its description. The maintain skill now does the same.

Co-authored-by: lauren <[email protected]>

* Name maintain-formal-verification-skill in the formal verification docs

Adds the skill to the spots that already cover formal verification: the
verify-and-ship section, the special-cases sentence on guide page 9, and the
poteto-help state check and recipe.

Co-authored-by: lauren <[email protected]>

* Point the guide page 9 link at the formal verification section

Co-authored-by: lauren <[email protected]>

* Keep the sync commit in place for a blocked check

maintain-formal-verification-skill set the sync commit to the checked commit
for every check, including a blocked one. A blocked check was not confirmed to
describe the code, so moving its sync commit hides the drift from the next
pass. Step 6 now leaves it in place and says so in the report. Step 2 now
points at step 5, where a failure is judged.

Co-authored-by: lauren <[email protected]>

---------

Co-authored-by: Cursor Agent <[email protected]>
…ation-skill (cursor#724)

* docs(pstack): match guide page 6 to create-formal-verification-skill's tool choice

cursor#721 made TLA+ the default for event-order questions in any language, and
added a fallback: when no verifier runs on the language, the agent says so
and tests the real code with generated inputs. The guide's tool-choice
paragraph still described the old wording. Claude Code harness copy
regenerated.

Co-authored-by: lauren <[email protected]>

* chore(pstack): bump to 0.15.28

Co-authored-by: lauren <[email protected]>

---------

Co-authored-by: Cursor Agent <[email protected]>
…ual-2026-10-19

# Conflicts:
#	.claude-plugin/marketplace.json
#	.github/workflows/validate-plugins.yml
#	README.md
#	scripts/validate-plugins.mjs
@SmailG SmailG added the sync Automated upstream sync label Oct 19, 2026
@SmailG
SmailG marked this pull request as ready for review October 19, 2026 14:45
@SmailG
SmailG merged commit 3f433d6 into main Oct 19, 2026
3 checks passed
@SmailG
SmailG deleted the sync/manual-2026-10-19 branch October 19, 2026 14:46
@SmailG
SmailG restored the sync/manual-2026-10-19 branch October 19, 2026 19:04
@SmailG
SmailG deleted the sync/manual-2026-10-19 branch October 19, 2026 19:04
@SmailG
SmailG restored the sync/manual-2026-10-19 branch October 19, 2026 19:12
@SmailG
SmailG deleted the sync/manual-2026-10-19 branch October 19, 2026 19:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

sync Automated upstream sync

Projects

None yet

Development

Successfully merging this pull request may close these issues.