Skip to content

pstack: restore /sharpen to the original prompt, return only the rewrite - #729

Merged
poteto merged 4 commits into
mainfrom
lauren/restore-sharpen-original-834c
Oct 20, 2026
Merged

poteto merged 4 commits into
mainfrom
lauren/restore-sharpen-original-834c

Conversation

@poteto

@poteto poteto commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

Why

/sharpen on main drifted from the prompt it came from. It now asks different questions, and it ends with "then do the work" instead of handing back a rewritten prompt. A drift eval found that the main version lost the original's four asks. Those asks are what a top professional would add, the rawest material, the methods and tools, and an outside check. The one place where main beat the original was leaving the user's choices open.

This PR restores the original prompt's words and appends one sentence. /sharpen now only returns a rewritten prompt and never does the task. The docs, guide, and /poteto-help text that said it "does the work" now match that behavior.

What changed

pstack/skills/sharpen/SKILL.md: the body is the original prompt with its four asks as a numbered list, plus one appended paragraph:

Leave choices that are mine to make open instead of deciding them.

The list format clears three of pstack's own prose rules that the inline original broke: technical-writing "Use periods, not semicolons", technical-writing "Make text in parentheses a full grammatical unit", and unslop rule 13 "no parentheses". The original separated its asks with semicolons and (1) to (4) markers. The only new words are "do four things", so that a complete sentence introduces the list. No word was removed.

The frontmatter keeps the skill wrapper (disable-model-invocation: true), and the description now matches the restored behavior.

Some candidate additions from the main version were left out because the drift eval showed no gain for them:

  • "Always keep one outside check": the original already scored at the ceiling.
  • "Better, not bigger" and "what the user is really after": the gains were small, and the score was lower or equal for most models.
  • "Over- or underspecified", "loosen constraints", and "no framing": none was linked to a gain.

These files now describe /sharpen as returning a rewritten prompt that doesn't do the task:

  • pstack/README.md
  • pstack/docs/guide/02-poteto-mode.md
  • pstack/docs/guide/10-recipes-and-pitfalls.md
  • pstack/skills/poteto-help/SKILL.md
  • pstack/skills/poteto-help/references/recipes.md

Nothing else in pstack calls /sharpen or relies on it doing the task.

The version goes from 0.15.28 to 0.15.29, and harness/pstack/claude-code was regenerated.

Eval

Two preregistered rounds compared the restored text against the original on six held-out scenarios from fields that the drift eval did not use: grant writing, endurance coaching, tenant law, hiring, medication review, and vegetable gardening. Three models from three vendors (Anthropic, OpenAI, and xAI) ran each scenario twice per arm in sandboxed runs. Judges from the other vendors graded blind, with 2 judges per packet across 36 packets per round. Round 1 tested the inline text. Round 2 tested the numbered-list text in this PR against the same original replies, with the same harness, scenarios, judges, and gates.

Item Original Inline text (round 1) List text (round 2)
Four asks (each 0–2) 2.00 / 2.00 / 1.94 / 1.99 1.96 / 2.00 / 1.96 / 2.00 1.94 / 2.00 / 1.96 / 1.97
Full rewritten prompt 36/36 36/36 36/36
Leaves the user's choices open (0–1) 0.50 1.00 (+0.47) 1.00 (+0.50, 95% CI +0.35 to +0.65, higher for all 3 models)
Replies the judges scored as partly doing the task 1/36 2/36 0/36
Judges preferred over the original 82% 82%

The original's column shows its round-2 grades. Each change is against the original's grades from the same round. For choices left open, the original scored 0.53 in round 1 and 0.50 in round 2.

Verdict for the list text: pass on every gate. The four asks match the original, every reply is a full rewritten prompt, no reply does the task, and the appended sentence shows its gain. The format kept the inline text's behavior.

The task-execution bar is zero replies. It failed in round 1 and passes in round 2, but the format change did not clearly cause that. The judges graded the same original replies again in round 2, and the original's count went from 2 to 1. So this flag moves by about one reply between gradings. On reading, no flagged reply in either round writes the plan or does the task. The flags come from concrete expert numbers in the "what a professional would do" section, which is the original's first ask.

Checks: node scripts/generate-pstack-harness-trees.mjs --check, node scripts/check-pstack-docs.mjs, and node scripts/validate-plugins.mjs all pass.

Open in Web Open in Cursor 

Note

Low Risk
Documentation and skill prompt text only; no runtime code, auth, or data paths change.

Reviewed by Cursor Bugbot for commit 9713a6a. Bugbot is set up for automated code reviews on this repo. Configure here.

cursoragent and others added 4 commits October 20, 2026 01:05
…ve choices open

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>
Drops the semicolons and the (1) to (4) markers that broke technical-writing
and unslop rule 13. Adds "do four things" so a complete sentence introduces
the list. Every other word is unchanged.

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

cursor Bot commented Oct 20, 2026

Copy link
Copy Markdown

Verdict: PASS+NOTES

Independent verifier (I did not write this PR). Head 9713a6a, compared with parent main at ddf824a. The branch is 0 behind and 4 ahead of main, and its merge base is main's tip.

The skill text

  • The body of pstack/skills/sharpen/SKILL.md has the words of the original prompt. A word-level diff against the original adds only "do four things" and "Leave choices that are mine to make open instead of deciding them." It removes no word. The four asks are a numbered list.
  • harness/pstack/claude-code/skills/sharpen/SKILL.md is byte-identical to the source.
  • The tested arm L in the eval bundle (variants/L/SKILL.md, sha256 563dfc46…) is byte-identical to the branch file. Arm A matches the original prompt.

Repo checks

Check main ddf824a head 9713a6a
node scripts/validate-plugins.mjs valid valid
node scripts/generate-pstack-harness-trees.mjs --check up to date up to date
node scripts/check-pstack-docs.mjs 0 problems, 32 of 32 commands in the guide 0 problems, 32 of 32 in the guide
Claude Code tree regenerated from scratch, diff -r against the committed tree – identical

Docs

All 16 changed files were read. Every /sharpen mention in pstack/ now says that it names the four asks, hands back a rewritten prompt, leaves the user's choices open, and does not do the task. These mentions are in README.md, guide chapters 02 and 10, poteto-help's intent table, and recipes.md. No mention still says "does the work". Each harness file mirrors its source. The version is 0.15.29 in all four plugin manifests.

/sharpen run as a user would, parent against head

Two fresh agents got the same request in a field the eval did not use: "Write me a cover letter for a junior data analyst job at a regional hospital. I have a stats degree and two years doing reporting at a credit union." Each agent had one skill body loaded, as /sharpen <args> loads it.

main text head text
Writes the cover letter Yes, a full letter with bracketed blanks No
Answers the four asks Not shown Yes, all four, with a separate section for each
Returns a rewritten prompt No Yes, a full prompt
Leaves the user's choices open Some, as blanks in the letter Yes, the prompt ends with 6 choices to ask the user about: tone and length, lead accomplishments, the reason for the move, the addressee, a work sample, and which tools to emphasize

Eval

I checked the eval data against the PR body and the eval doc. Round 2's summary.json gives the same numbers:

  • Four asks within −0.06 of the original.
  • Full rewrites: 36 of 36.
  • Replies that partly do the task (judge mean ≥ 1): 0 of 36 for L, 1 of 36 for the original.
  • Choices left open: +0.50, 95% CI +0.35 to +0.65.
  • Judges preferred L: 82%.
  • pass: true.

After I extracted the bundles, 15 of the 16 frozen inputs matched frozen-hashes.txt in each round.

Notes (do not block the merge)

  1. I could not check one frozen input, /srv/sxh/run-one.sh, because it exists only on the eval machine.
  2. A reply still gives the four-ask analysis before the rewritten prompt, as the original asks. The docs describe this correctly. "Return only the rewrite" in the title means that the reply does not do the task. It does not mean the reply has no analysis.
  3. My parent-against-head run is one prompt on one model. It is a spot check on top of the 108-run eval, not a replacement for it.

CI validate and Cursor Bugbot both passed on 9713a6a. There are no review threads.

@poteto
poteto marked this pull request as ready for review October 20, 2026 02:21
@poteto
poteto merged commit 88d4751 into main Oct 20, 2026
2 checks passed
@poteto
poteto deleted the lauren/restore-sharpen-original-834c branch October 20, 2026 02:25
creedants added a commit to creedants/pstack-t3 that referenced this pull request Oct 20, 2026
Syncs upstream pstack to 0.15.29 (cursor/plugins#729), which restores
`/sharpen` to its original prompt and returns only the rewritten prompt.

## What changed

- `vendor/pstack/` matches upstream `pstack/` at 88d47514b8, and
`upstream.json` and the README badge name 0.15.29.
- `skills/sharpen/SKILL.md` ships the new upstream prompt through the
build. It needs no override.
- `t3/overrides/poteto-help/SKILL.md` and `references/recipes.md` carry
upstream's one-line sharpen changes with the `$sharpen` prefix. Nothing
else in them changes, and their lock entries are refreshed.

## Verification

- All 172 vendored files match upstream's blobs, and the vendored tree
hash equals upstream's `pstack/` subtree.
- `python3 scripts/run_tests.py` passes in four parts. `python3
scripts/build.py` leaves no diff, and `python3 scripts/check.py` prints
`ok`.

Kind: upkeep
SmailG added a commit to SmailG/claude-cursor-plugins that referenced this pull request Oct 20, 2026
…ginal prompt, return only the rewrite (cursor#729)

chore: sync with cursor/plugins — pstack: restore /sharpen to the original prompt, return only the rewrite (cursor#729)
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.

2 participants