Skip to content

ship deslop, control-cli, and control-ui inside pstack - #44

Merged
caelaxie merged 1 commit into
mainfrom
cursor/embed-team-kit-skills-edf3
Oct 26, 2026
Merged

caelaxie merged 1 commit into
mainfrom
cursor/embed-team-kit-skills-edf3

Conversation

@caelaxie

Copy link
Copy Markdown
Contributor

ship deslop, control-cli, and control-ui as ordinary pstack skills, and drop every cursor-team-kit mention.

files copied from cursor/plugins e73df471cd4bd918367e99f3dd9c51bd53ddf5f0, verbatim (no devin edits; nothing in them blocks loading):

  • skills/deslop/SKILL.md from cursor-team-kit/skills/deslop/SKILL.md (blob 1b3827c7f991182149a7abda696af43ff8f17a12)
  • skills/control-cli/SKILL.md from cursor-team-kit/skills/control-cli/SKILL.md (blob 69289ac517e8a28380c8eca5c6692e8a601fa62c)
  • skills/control-ui/SKILL.md from cursor-team-kit/skills/control-ui/SKILL.md (blob 68484fd5418cc893a6bf40e0db45b3001dcf5947)

these three files are identical on cursor/plugins main 99b609a72323b70204eab407c622f436e858e112.

cursor-team-kit removals:

  • README.md: deleted the deslop bullet, the control-cli/control-ui bullet, and the install-alongside line
  • docs/guide/05-build-and-clean.md: deleted the two sentences that said /deslop ships in cursor-team-kit
  • skills/poteto-help/SKILL.md: deleted the not-in-pstack bullet
  • skills/poteto-mode/SKILL.md: dropped from the cursor-team-kit plugin; replaced `cursor-team-kit` publishes with pstack includes
  • skills/poteto-mode/playbooks/autopilot-full.md: dropped from the cursor-team-kit plugin and from cursor-team-kit
  • skills/poteto-mode/playbooks/multi-phase-plan.md: dropped three from cursor-team-kit
  • skills/poteto-mode/playbooks/opening-a-pr.md: dropped from cursor-team-kit
  • skills/poteto-mode/playbooks/orchestrate.md: dropped (from cursor-team-kit)
  • skills/poteto-mode/playbooks/shipping.md: dropped from cursor-team-kit

harness proof (regular + fusion mode) will be posted separately.

Closes #32
Closes #33
Closes #34
Closes #35
Closes #36
Closes #37
Closes #38
Closes #39
Closes #40
Closes #41
Closes #42
Closes #43

Open in Web Open in Cursor 

copy the three skills from cursor/plugins e73df47 and drop every cursor-team-kit mention.

Co-authored-by: Kaitian Xie <caelaxie@users.noreply.github.com>

@caelaxie caelaxie left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

verdict: changes requested, proof only. content passes.

  • the three new skills are byte-identical to cursor/plugins 99b609a cursor-team-kit/skills/{deslop,control-cli,control-ui}/SKILL.md (blobs 1b3827c, 69289ac, 68484fd match).
  • the 9 team-kit removals are phrase-only; a grep of every text file at 45aa2af finds no team-kit left.
  • Closes #32–#43 match the 12 open issues one to one. Validate plugin is green.

missing: devin harness proof on 45aa2af in both regular and fusion mode. per mode, show devin plugins install (the --local wrapper pinned to the full head sha is fine, symlinks aren't) plus the list, and show that deslop, control-cli and control-ui load as pstack skills. post it as a pr comment or in the body and i'll merge on the next sweep.

Copy link
Copy Markdown
Contributor Author

harness proof

real devin cli on a local box (no cloud agent, no git clone). pr head 45aa2afcefff16a96ca97b23dfb7fb0e09dd880c, checked with git ls-remote refs/pull/44/head before install and again before cleanup. version stays 0.15.32.

  • cli: devin 3000.11.205 (6dea39440ae3). devin auth status → Logged in (via Devin).
  • read-only throughout. live turns ran in a trusted scratch dir whose allowlist only permits reads (Write(**)/Edit(**) denied). i added no allowlist entries, and no ~/.config/devin/agents/ profiles existed before or after.
# requirement result
1 --local wrapper pinned to the full head sha, then devin plugins list shows pstack v0.15.32 (required) ✅ pass
2 install cache: 203 files all cmp-identical to raw @ head, 0 symlinks, file list = head tree (203 = 203) ✅ pass
3 deslop, control-cli, control-ui SKILL.md byte-identical to cursor/plugins@e73df47 cursor-team-kit/skills/<name>/SKILL.md ✅ pass
4 rg -i team-kit over the installed cache: no matches ✅ pass
5 devin skills list: 61 /pstack: skills, including /pstack:deslop, /pstack:control-cli, /pstack:control-ui ✅ pass
6 live regular turns (swe-2-max): new skills load and answer from their text ✅ pass
7 live fusion turns (fusion-claude-opus-5-5-medium-sidekick-swe-2-medium): same ✅ pass
8 cleanup: wrapper and pstack removed, thermos left alone, end state = before ✅ pass

1. install / list

$ devin plugins list          # before
Installed plugins

  • thermos v1.0.0

$ cat wrap-pr44/.devin-plugin/plugin.json
{ "name": "pstack-harness-pr44", "version": "0.0.0",
  "requiredPlugins": [ { "source": "github", "repo": "pstack-ports/devin-pstack",
                         "sha": "45aa2afcefff16a96ca97b23dfb7fb0e09dd880c" } ] }
$ devin plugins install --local -y /workspace/devin-harness/wrap-pr44
This install will add:
  • pstack-harness-pr44 v0.0.0
  • pstack v0.15.32 (required)
      ...
      /pstack:control-cli
      ...
      /pstack:control-ui
      ...
      /pstack:deslop
      ...
✓ Installed pstack-harness-pr44.
  auto-installed required plugins: pstack
$ devin plugins list
Installed plugins

  • thermos v1.0.0
  • pstack-harness-pr44 v0.0.0
  • pstack v0.15.32 (required)

2. install cache: cmp, symlinks, upstream cmp

$ cd ~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32
$ grep -n '"version"' .devin-plugin/plugin.json plugin.json
.devin-plugin/plugin.json:3:  "version": "0.15.32",
plugin.json:4:  "version": "0.15.32",
$ find . -type l | wc -l
0
$ curl -fsSL "https://api.github.com/repos/pstack-ports/devin-pstack/git/trees/45aa2afcefff16a96ca97b23dfb7fb0e09dd880c?recursive=1"   # blobs -> head.txt
truncated False
symlinks/submodules in tree: []
$ wc -l head.txt inst.txt
  203 head.txt
  203 inst.txt
$ comm -3 head.txt inst.txt
(empty)
$ while read f; do curl -fsSL https://raw.githubusercontent.com/pstack-ports/devin-pstack/45aa2afcefff16a96ca97b23dfb7fb0e09dd880c/$f -o raw/$f && cmp -s $f raw/$f ...; done < inst.txt
IDENTICAL=203 DIFF/ERR=0
$ # the 12 files the pr touches:
regular file 27098 IDENTICAL README.md
regular file 5627 IDENTICAL docs/guide/05-build-and-clean.md
regular file 719 IDENTICAL skills/deslop/SKILL.md
regular file 4333 IDENTICAL skills/control-cli/SKILL.md
regular file 4802 IDENTICAL skills/control-ui/SKILL.md
regular file 15600 IDENTICAL skills/poteto-help/SKILL.md
regular file 23951 IDENTICAL skills/poteto-mode/SKILL.md
regular file 6578 IDENTICAL skills/poteto-mode/playbooks/autopilot-full.md
regular file 13176 IDENTICAL skills/poteto-mode/playbooks/multi-phase-plan.md
regular file 5682 IDENTICAL skills/poteto-mode/playbooks/opening-a-pr.md
regular file 17360 IDENTICAL skills/poteto-mode/playbooks/orchestrate.md
regular file 4396 IDENTICAL skills/poteto-mode/playbooks/shipping.md
$ # upstream: raw cursor/plugins@e73df47 cursor-team-kit/skills/<name>/SKILL.md
$ cmp skills/deslop/SKILL.md upstream -> IDENTICAL (719 bytes)
$ cmp skills/control-cli/SKILL.md upstream -> IDENTICAL (4333 bytes)
$ cmp skills/control-ui/SKILL.md upstream -> IDENTICAL (4802 bytes)
$ ls -d skills/*/ | wc -l
61

3. team-kit grep

$ rg -i team-kit .
(no matches, exit 1)
$ rg -n -o '.{0,50}(deslop|control-cli|control-ui).{0,50}' skills/poteto-mode/SKILL.md   # excerpt
26:- Before commit → the `deslop` skill (`/deslop`).
28:LI → the matching control skill. pstack includes `control-cli` (CLIs and TUIs) and `control-ui` (browser / Elec

4. skills

$ devin skills list | grep -c /pstack:
61
$ devin skills list | grep -E '/pstack:(deslop|control-cli|control-ui) '
  /pstack:control-cli [user,model] (~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/control-cli) - Build or adapt a local harness to drive, inspect, and profile an interactive CLI or TUI ...
  /pstack:control-ui [user,model] (~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/control-ui) - Build or adapt a local browser/CDP harness to drive and inspect a web, IDE, or Electron UI ...
  /pstack:deslop [user,model] (~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/deslop) - Remove AI-generated code slop and clean up code style

5. live turns (read-only, describe-only)

each mode ran three turns via --prompt-file: (a) /pstack:deslop (describe what it would check, quote the first heading), (b) /pstack:poteto-mode (routing for commit / cli / browser ui, quote step 1 of control-cli and control-ui), (c) bare /deslop (the form poteto-mode tells users to type). the export shows the model; fusion's export lists the sidekick tool and regular's doesn't.

regular: devin -p --model swe-2-max (export model SWE-2 Max)

(a) /pstack:deslop, exit 0. export: deslop body injected as the user message, plus a skill {"skill":"deslop"} call whose source is the 0.15.32 cache path

HEADING: # Remove AI code slop

(1) I'd check the current branch's diff against `main` (`git diff main...HEAD`), reviewing only changes introduced by the branch. (2) Focus areas: unnecessary or style-inconsistent comments; defensive checks/try-catch abnormal for trusted code paths; `any` casts used only to bypass type issues; deeply nested code better served by early returns; other patterns inconsistent with the file and surrounding codebase. (3) Guardrails: keep behavior unchanged unless fixing a clear bug; prefer minimal, focused edits over broad rewrites; keep the final summary concise (1-3 sentences).

(b) /pstack:poteto-mode, exit 0. export: poteto-mode body injected, then two reads of the cached control-cli/SKILL.md and control-ui/SKILL.md

1. Before commit it routes to the `deslop` skill, invoked as `/deslop`.

2. CLI changes use `control-cli`. Browser UI changes use `control-ui`. Both come from the pstack plugin (devin-pstack 0.15.32, cached under `github.com_pstack-ports_devin-pstack-816793bb`).

3. `control-cli` Harness Loop step 1 reads "Identify the command under test and the smallest reproducible workspace." Loaded from `~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/control-cli/SKILL.md`. `control-ui` Setup Pattern step 1 reads "Start the app locally using the repo's documented dev command." Loaded from `~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/control-ui/SKILL.md`.

(c) bare /deslop, exit 0. the export shows the cli resolved it and injected the deslop body (# Remove AI code slop ...) ahead of the prompt. the model still answered NO SKILL LOADED because the body arrives inline with no marker. the skill loaded, and the model misreported it.

fusion: devin -p --model fusion-claude-opus-5-5-medium-sidekick-swe-2-medium (export model Fusion (Claude Opus 5.5 Medium + SWE-2 Medium))

(a) /pstack:deslop, exit 0. export: deslop body injected as the user message

HEADING: # Remove AI code slop

1. **Diff:** I'd look at the current branch's diff against `main` for AI-generated slop the branch added.
2. **Focus areas:**
   - Comments that aren't needed or don't match the local style.
   - Defensive checks or try/catch blocks that are unusual for trusted code paths.
   - Casts to `any` that only exist to get around type issues.
   - Deeply nested code that early returns would simplify.
   - Other patterns that don't match the file or the surrounding codebase.
3. **Guardrails:**
   - Keep behavior the same unless fixing a clear bug.
   - Prefer small, focused edits over broad rewrites.
   - Keep the final summary to 1–3 sentences.

(b) /pstack:poteto-mode, exit 0. export: poteto-mode body injected, then two reads of the cached control skills

1. Before every commit, poteto-mode routes to the `deslop` skill, invoked as `/deslop`.

2. A CLI change uses `control-cli` and a browser UI change uses `control-ui`. Both come from the pstack plugin, `github.com_pstack-ports_devin-pstack`, version 0.15.32.

3. Here are the two steps, quoted verbatim:
   - Step 1 of control-cli's "Harness Loop": "Identify the command under test and the smallest reproducible workspace." I loaded it from `~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/control-cli/SKILL.md`.
   - Step 1 of control-ui's "Setup Pattern": "Start the app locally using the repo's documented dev command." I loaded it from `~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/control-ui/SKILL.md`.

(c) bare /deslop, exit 0. export: deslop body injected

Yes. The message body is the deslop skill.
HEADING: # Remove AI code slop
Source: ~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/deslop/SKILL.md

none of the six turns made a write, edit, exec, or subagent call. the only tool calls were skill and read.

6. re-check and cleanup

$ git ls-remote https://github.com/pstack-ports/devin-pstack refs/pull/44/head
45aa2afcefff16a96ca97b23dfb7fb0e09dd880c	refs/pull/44/head
$ devin plugins remove pstack-harness-pr44 -y
✓ Removed pstack-harness-pr44.
$ devin plugins remove pstack -y
✓ Removed pstack from your personal plugins.
$ devin plugins list
Installed plugins

  • thermos v1.0.0
$ devin skills list | grep -c /pstack:
0

end state matches the before list.

no code was changed, and no secrets appear in this comment.

@caelaxie caelaxie left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not merging yet. one proof gap at 45aa2af.

what passes: head unchanged, not a draft, mergeable clean, validate plugin green, body closes #32 through #43. the --local wrapper pins the full head sha, and install + devin plugins list output is pasted. the 203-file cmp shows 0 symlinks, the 3 skills match upstream e73df47, and the team-kit grep finds nothing. 61 /pstack: skills are listed. regular and fusion turns (a) /pstack:deslop and (b) /pstack:poteto-mode paste real answers quoting the cached skill text.

the gap: regular-mode turn (c), bare /deslop. that's the form poteto-mode tells users to type, and it's the only turn with no pasted output. the model answered NO SKILL LOADED. the claim that the cli injected the deslop body rests on prose about the export, not on an excerpt. fusion (c) shows it loading. regular (c) doesn't, so regular mode isn't proven for the bare form.

to clear it, do one of these at the same head:

  • paste the regular (c) export excerpt showing the injected deslop body and its 0.15.32 cache source, or
  • rerun regular (c) with a prompt that makes the model quote the heading and source, and paste the answer.

no code change needed.

Copy link
Copy Markdown
Contributor Author

follow-up: regular-mode bare /deslop

re review 5647867681. head 45aa2afcefff16a96ca97b23dfb7fb0e09dd880c, checked with git ls-remote refs/pull/44/head before the reinstall and again before cleanup. cli devin 3000.11.205 (6dea39440ae3).

original turn (logs/pr44-live-regular-bare-deslop.export, swe-2-max)

the prompt was /deslop Describe-only check .... devin replaced /deslop with the deslop skill body, so the user message starts with the skill text:

step 7 source=user:
  # Remove AI code slop

  Check the diff against main and remove AI-generated slop introduced in the branch.
  ...
  (user message starts with deslop SKILL.md body minus frontmatter: True, 629 chars; then " Describe-only check for a harness run. ...")
step 8 <available_skills>: - **deslop**: Remove AI-generated code slop and clean up code style (source: ~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/deslop/SKILL.md)
step 9 agent model=swe-2-max tool_calls=0 answer: NO SKILL LOADED

the skill text was injected. the model didn't notice it, because the body arrives inline with no marker, and answered NO SKILL LOADED.

rerun (logs/pr44-live-regular-bare-deslop-rerun.{log,export})

reinstalled via the same wrap-pr44 wrapper (pstack v0.15.32 (required), 61 /pstack: skills, cached skills/deslop/SKILL.md cmp-identical to raw @ head). ran from the trusted read-only scratch dir:

$ cd scratch && devin -p --model swe-2-max --export ../logs/pr44-live-regular-bare-deslop-rerun.export --prompt-file /tmp/pr44-bare-rerun.txt
--- prompt ---
/deslop Describe-only check for a harness run. Do NOT edit, write, or create any file, do NOT run git or any state-changing command, do NOT spawn subagents. The /deslop command above loads the deslop skill. In under 60 words: quote the loaded deslop skill's first heading verbatim on a line starting with "HEADING:", and give the deslop skill's SKILL.md file path (as listed in your available skills) on a line starting with "PATH:".
--- output ---
HEADING: # Remove AI code slop
PATH: ~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/deslop/SKILL.md
devin exit code: 0

export excerpt (agent model SWE-2 Max):

step 7 source=user:
  # Remove AI code slop
  ...
  (user message starts with deslop SKILL.md body minus frontmatter: True, 629 chars)
step 8 <available_skills>: - **deslop**: Remove AI-generated code slop and clean up code style (source: ~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/deslop/SKILL.md)
TOOL: skill {"command": "invoke", "skill": "deslop"}
OBS: <skill name="deslop" status="running">
OBS: Source: ~/.local/share/devin/cli/plugins/cache/github.com_pstack-ports_devin-pstack-816793bb/0.15.32/skills/deslop/SKILL.md

only one tool call, skill. no writes, edits, execs, or subagents. bare /deslop loads pstack's deslop in regular mode. the original NO SKILL LOADED was the model misreading the inline body, not a loading failure.

cleanup

$ devin plugins remove pstack-harness-pr44 -y
✓ Removed pstack-harness-pr44.
$ devin plugins remove pstack -y
✓ Removed pstack.
$ devin plugins list
Installed plugins

  • thermos v1.0.0
$ devin skills list | grep -c /pstack:
0

end state matches pr44-before.log. no secrets in this comment.

@caelaxie caelaxie left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

gap from review 5647867681 closed. harness proof verified at 45aa2af in regular and fusion mode.

the follow-up pastes the original regular-mode export. it shows bare /deslop injected the deslop body and listed the pstack 0.15.32 cache source. the swe-2-max rerun pastes a skill invoke deslop call, HEADING: # Remove AI code slop, the 0.15.32 cache path, and exit 0. the heading matches skills/deslop/SKILL.md at head, and the body minus frontmatter is 629 chars there too. the head is unchanged, validate plugin is green, mergeable is clean, and the body closes #32 through #43. this pr passes. squash-merging.

@caelaxie
caelaxie merged commit 4ed43c1 into main Oct 26, 2026
1 check passed
@caelaxie
caelaxie deleted the cursor/embed-team-kit-skills-edf3 branch October 26, 2026 05:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment