Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .devin-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "pstack",
"version": "0.5.0",
"version": "0.6.1",
"description": "Rigorous agent workflows for Devin CLI. Write less, higher quality code.",
"homepage": "https://github.com/athul-ramesh/ptstack-devin",
"repository": "https://github.com/athul-ramesh/ptstack-devin",
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ Avoid installing two copies with the same plugin name. Devin may source-qualify

Ask `/pstack:poteto-help` with a setup or workflow question. This explicit-user skill answers with one suggested prompt and a source link. It does not start a task for a help question. A request to do work follows poteto-mode instead.

Invoke [`/pstack:ketchup`](skills/ketchup/SKILL.md) to catch up on this chat since your last message. It is explicit-user and read-only. It summarizes changes and decisions in under 250 words, with available visuals, options, costs, a recommendation, and what happens without an answer. The CLI uses compact text when no renderer is available.
Invoke [`/pstack:ketchup`](skills/ketchup/SKILL.md) to catch up on this chat since your last message. It is explicit-user and read-only. It summarizes changes and decisions well under 150 words in plain sentences, with small available visuals, options, costs, a recommendation, and what happens without an answer. The CLI uses compact text when no renderer is available.

The [usage guide](docs/usage-guide.md) covers prompting, investigation, prototypes before plans, real behavior verification, benchmark evidence, repeated-mistake enforcement, and bounded in-session delivery. The help skill includes [prompting guidance](skills/poteto-help/references/prompting.md) and [copyable recipes](skills/poteto-help/references/recipes.md).

Invoke [`/pstack:sharpen`](skills/sharpen/SKILL.md) before a task to have the agent frame it the way a top expert would, keep one outside check, leave your choices open, and then do the work. It runs only when requested.

Invoke [`/pstack:in-your-own-words`](skills/in-your-own-words/SKILL.md) to hear the goals and problem the agent understood. It runs only when requested and adds no confirmation gate.

This release selectively ports upstream pstack 0.15.23. It adds goal playback, shorter ketchup replies, usable-state verification, a cheap observability proposal after deep debugging, robust Markdown fence checks, and configurable worktree merge bases. Devin dispatch, profile pins, and delivery authority are preserved. See the [port audit](docs/pstack-0.15.23-port-audit.md) for source coverage, exclusions, and evidence limits. Earlier audits cover [0.15.17](docs/pstack-0.15.17-port-audit.md) and [0.15.13](docs/pstack-0.15.13-port-audit.md).
Release 0.6.1 selectively ports upstream pstack 0.15.25; see the [0.15.25 port audit](docs/pstack-0.15.25-port-audit.md). Release 0.6.0 selectively ported upstream pstack 0.15.24; see the [0.15.24 port audit](docs/pstack-0.15.24-port-audit.md). The prior release selectively ported upstream pstack 0.15.23. It adds goal playback, shorter ketchup replies, usable-state verification, a cheap observability proposal after deep debugging, robust Markdown fence checks, and configurable worktree merge bases. Devin dispatch, profile pins, and delivery authority are preserved. See the [port audit](docs/pstack-0.15.23-port-audit.md) for source coverage, exclusions, and evidence limits. Earlier audits cover [0.15.17](docs/pstack-0.15.17-port-audit.md) and [0.15.13](docs/pstack-0.15.13-port-audit.md).

## Features retained from 0.2.0

Expand Down
34 changes: 34 additions & 0 deletions docs/pstack-0.15.24-port-audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Port pstack 0.15.24 to Devin

Audited on 2026-10-15 against Devin baseline `01bc45a`. Plugin version is 0.6.0, with 37 public skills, 24 internal principle leaves, and 20 playbooks.

## Source and coverage

Upstream range: [`dbf4981...1e5c90a`](https://github.com/cursor/plugins/compare/dbf49813a39c1a5389c5e28cb8e4c1c2379e2454...1e5c90a4b6f249917bd21fe361b3a2a7deb741b8) (`pstack/`, 0.15.23 to 0.15.24). The previous audit already covers the 0.15.23 baseline, including #539, #570, #571, #575, #577, #602, and #606, so no earlier prerequisite is missing.

| Upstream change | Devin disposition |
| --- | --- |
| [#615](https://github.com/cursor/plugins/pull/615) `/sharpen` | Ported as `/pstack:sharpen` with `triggers: [user]`, the documented Devin equivalent of `disable-model-invocation: true`. Help entry and recipe added. |
| [#609](https://github.com/cursor/plugins/pull/609) ketchup rewrite | Ported. Under-150-word budget that counts visual and fallback words, bro voice without its task, two-line action items, unasked irreversible steps, box and label limits. Retains the host-rendering limit and text fallback. Drops `/visualize`, which this port does not ship. |
| [#613](https://github.com/cursor/plugins/pull/613) per-spawn effort and fast-mode rule | Adapted to one statement in poteto-mode Models. Devin `run_subagent` takes a profile, not a model, so there is no per-call reasoning or speed knob. The rule's one-liners in arena, how, why, interrogate, swarm, reflect, recall, and other playbooks are not added. |
| #613 `cursor-grok-*` and `composer-*` family fallbacks | Skipped. Cursor model slugs. This port ships no Cursor slugs. |
| #613 swarm cadence | Adapted in multi-phase-plan. The full audit set runs once at the code-ready SHA, and again only for new behavior, a redesign, or a large diff. Rebases, conflict resolutions, and minor fixes get one fresh-context verifier. |
| #613 orchestrate, shipping, autopilot drop Graphite and prefer Origin | Already satisfied for Graphite. Fork prose and helpers use `gh` only. Origin CLI preference skipped. It is a Cursor forge, not part of the Devin docs. Shipping and autopilot remain cut. The `orch.ts` frontier rewrite is skipped because this port has no orch helper. |
| #613 `worktree-audit.sh` Origin branch | Skipped for the same reason. The `gh` path is unchanged. |
| #613 `watch-pr` GitHub changes | Skipped. This port has no watch-pr helper. |
| [#616](https://github.com/cursor/plugins/pull/616) autopilot catches up with ketchup | Skipped. Autopilot-full and autopilot-stack are cut. |
| [#617](https://github.com/cursor/plugins/pull/617) version bump | Plugin bumped independently to 0.6.0. |
| #613 `/loop 1h` tick and Cursor cloud agent owners | Skipped. Devin `/loop` is not a timer. |

## Devin compatibility

| Capability | Evidence |
| --- | --- |
| User-only skills | Documented `triggers` field, default `[user, model]`. [Creating skills](https://docs.devin.ai/cli/extensibility/skills/creating-skills). |
| No per-dispatch model or effort | Documented. "The `run_subagent` tool takes a profile, not a model." [Subagents](https://docs.devin.ai/cli/subagents). |
| Plugin skills and agents | Local CLI and Desktop only. [Plugins](https://docs.devin.ai/cli/extensibility/plugins/overview). |
| `/loop` | Interactive review loop, not a scheduler. [Commands](https://docs.devin.ai/cli/reference/commands). |

## Verification and limits

`node --test tests/*.test.mjs` passes. The test suite adds `sharpen` to the user-activation contract. These are static checks. Native 0.6.0 skill registration, slash activation, and visual rendering are untested.
27 changes: 27 additions & 0 deletions docs/pstack-0.15.25-port-audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Port pstack 0.15.25 to Devin

Audited on 2026-10-16 on top of the open 0.15.24 port branch (`port/pstack-v0.15.24`, PR #8). Plugin version is 0.6.1, with 37 public skills, 24 internal principle leaves, and 20 playbooks.

## Source and coverage

Upstream range: [`1e5c90a...99743e9`](https://github.com/cursor/plugins/compare/1e5c90a4b6f249917bd21fe361b3a2a7deb741b8...99743e9c151c8537cbbf1f98bb38f34ef3368453) (`pstack/`, 0.15.24 to 0.15.25 and two follow-ups).

| Upstream change | Devin disposition |
| --- | --- |
| [#628](https://github.com/cursor/plugins/pull/628) ketchup explains changes with screenshots, videos, and diagrams | Adapted. Ketchup now helps the user understand each change, shows existing screenshots, videos, and diagrams first, sums up in one bullet per ask, lists action items as plain bullets, and puts a choice after the list. Rendered pictures no longer count toward the 150 words; text fallbacks still do. Every picture stays conditional on the Devin host rendering it, and the text fallback is kept, now linking existing captures. `/visualize` stays dropped because this port does not ship it. |
| [#633](https://github.com/cursor/plugins/pull/633) four principles restated as reasoning | Ported verbatim apart from `triggers: [model]` frontmatter: attack-the-premise (test the premise instead of an actor census), fix-root-causes (a guard is a fix only when the state is legitimate), make-operations-idempotent (derive each step from existing state), test-behavior-not-implementation (break-the-behavior and change-the-internals checks). The poteto-mode principle index and `/pstack:correct` step 3 follow. |
| [#634](https://github.com/cursor/plugins/pull/634) cut marginal sections from four skills | Ported. Lead judgment drops its preamble and verdict calibration. Migrate-callers drops its intro, rule bullets, and closing line, as upstream did. Type-system-discipline drops the illegal-states, constructions, cast, exhaustiveness, and partiality bullets, keeping `/pstack:typescript-best-practices`. Swarm drops its opening sentence and the N-is-total-workers step; Devin PanelRun, workspace, model, and evidence sections are untouched. |
| [#614](https://github.com/cursor/plugins/pull/614) version bump | Plugin bumped independently to 0.6.1. |

## Devin compatibility

| Capability | Evidence |
| --- | --- |
| Model-triggered principle leaves | Documented `triggers` field. [Creating skills](https://docs.devin.ai/cli/extensibility/skills/creating-skills). |
| Inline screenshots, video, Mermaid | Not documented for the Devin CLI terminal. The changelog documents image attachments as input and Markdown table rendering, not inline image or diagram output. Ketchup therefore keeps every picture conditional on the host and keeps the text fallback. [CLI changelog](https://docs.devin.ai/cli/changelog/stable). |

The principle and cut changes are prose-only and touch no Devin tool, profile, hook, or helper.

## Verification and limits

`node --test tests/*.test.mjs` passes, including a new contract test for the ketchup fallback and the rewritten principles. These are static checks. Native 0.6.1 skill registration and inline visual rendering in Devin are untested.
6 changes: 5 additions & 1 deletion docs/release-notes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Release notes

Plugin `pstack` 0.6.1 selectively ports upstream 0.15.25. Four principles (attack-the-premise, fix-root-causes, make-operations-idempotent, test-behavior-not-implementation) are restated as reasoning instead of rules, and `/pstack:correct` follows the new test rule. Marginal sections are cut from interrogate's lead judgment, migrate-callers, type-system-discipline, and swarm. Ketchup now explains each change, leads with existing screenshots, videos, and diagrams when the host renders them, sums up in bullets, and lists action items as plain bullets. The Devin text fallback is kept. Native activation of 0.6.1 and inline image rendering remain untested. See the [port audit](pstack-0.15.25-port-audit.md).

Plugin `pstack` 0.6.0 selectively ports upstream 0.15.24. It adds explicit-user `/pstack:sharpen`, rewrites ketchup to a reply well under 150 words with small plain-language visuals, states that Devin dispatch has no per-call effort or speed knob, and runs the full plan audit set once at the code-ready SHA with a single fresh-context verifier for rebases and minor fixes. Native activation of 0.6.0 remains untested. See the [port audit](pstack-0.15.24-port-audit.md).

Plugin `pstack` 0.5.0 selectively ports upstream 0.15.23. It adds explicit-user `/pstack:in-your-own-words`, short ketchup replies with available visuals and a text fallback, usable-state verification, and an observability proposal after deep debugging. Plan validation tracks Markdown fence delimiters. Worktree audits use the remote default or an explicit base and accept merged-PR evidence only for that base. Native activation of 0.5.0 remains untested. See the [port audit](pstack-0.15.23-port-audit.md).

Plugin `pstack` 0.4.0 adds explicit-user, read-only `/pstack:ketchup` and ports the prompt reductions from upstream pstack #538 and #539 at 0.15.17. Existing Devin profile pins, dispatch contracts, helpers, hooks, and delivery authority remain intact. Native activation of this release is untested. See the [port audit](pstack-0.15.17-port-audit.md).
Expand All @@ -10,7 +14,7 @@ Plugin 0.2.0 was verified on local Devin CLI 3000.11.3 (9c803229faa4). Earlier 3

## Shipped

36 public skills under `/pstack:<name>`. 24 `principle-*` leaves, model-triggered. 20 poteto-mode playbooks. Profiles `pstack:poteto-agent`, `pstack:poteto-agent-{swe,opus,sonnet,codex}`, `pstack:comment-sicko`, and `pstack:panel-{swe,opus,sonnet,codex}`.
37 public skills under `/pstack:<name>`. 24 `principle-*` leaves, model-triggered. 20 poteto-mode playbooks. Profiles `pstack:poteto-agent`, `pstack:poteto-agent-{swe,opus,sonnet,codex}`, `pstack:comment-sicko`, and `pstack:panel-{swe,opus,sonnet,codex}`.

SessionStart injects `PSTACK_ROUTE=/pstack:poteto-mode`.

Expand Down
2 changes: 1 addition & 1 deletion skills/correct/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ First, read recent commits, reverts, review comments, agent instruction files, a

1. **Eliminate it with architecture.** Give each piece of state one owner and each task one supported way. Hide internals so the wrong import fails. Replace hand-synced lists with one source of truth. Delete old ways and dead code an agent would copy.
2. **Enforce it with types so the bad state can't be written.** If bad code still compiles, add a lint or CI check whose error names the file, type, or function to use instead. If the pattern is already common, fail only when a change adds more.
3. **Test the behavior.** Fix or delete any test that would still pass if every function it calls returned nothing.
3. **Test the behavior.** Fix or delete any test that still passes when the behavior it checks breaks, or that fails when only the internals change.
4. **Write docs or agent rules last, only for judgment calls.** Nothing fails when an agent skips them.

## Fix and prove
Expand Down
19 changes: 0 additions & 19 deletions skills/interrogate/references/lead-judgment.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,5 @@
# Lead Judgment Framework

You are the lead reviewer. The configured reviewers have produced their findings. Apply pragmatic engineering judgment. Don't aggregate; filter, contextualize, and decide.

## Why This Step Matters

Adversarial reviewers are useful because they're aggressive. But aggression without context produces noise. The reviewers only saw a slice of the codebase and a one-paragraph intent statement. They don't know:

- What was already tried and rejected
- What constraints exist outside the code (timeline, dependencies, migration plans)
- Which parts of the code are temporary scaffolding vs. permanent architecture
- What the next PR in the stack will address

You have the full conversation context. Use it.

## Filtering Principles

### Nitpick Gravity
Expand Down Expand Up @@ -50,9 +37,3 @@ Don't dismiss findings just because they're uncomfortable. The whole point of ad
- You read the finding and think "...yeah, actually"

Be especially careful about dismissing security findings and correctness bugs. These deserve more scrutiny even when they come from a single model.

## Verdict Calibration

A good verdict is useful, not comprehensive. The user should be able to read the "Act On" section, fix those issues, and ship with confidence. If your "Act On" list has more than 5 items, you're probably not filtering hard enough.

The "Dismissed" section is not busywork. It's a trust mechanism. Showing the user what you rejected and why lets them override your judgment where they disagree. This is more valuable than hiding the rejected findings.
Loading