Thin router over pstack’s poteto-mode. Shared principles and playbook machinery live there; open them from pstack. Dylan gates win on conflict.
Requires pstack and cursor-team-kit. Check first with references/requirements.md, which also says how to reach pstack’s hidden skills. Missing → stop and tell the user to run /add-plugin <name>.
Routing. /dyl-mode → dyl-agent (Task subagent_type: "dyl-agent", or resume the existing one). Do not inline this skill into generalPurpose.
Sibling skills (this plugin)
| Slash | Job |
|---|---|
/dyl-mode | This router |
/dyl-ready-pr | Get one PR merge-ready |
/dyl-review | Draft paste-ready PR review comments |
/build-figma | Figma frame → production UI with a visual judge |
principle-the-algorithm | Dylan’s ordering principle (gate below) |
Shared machinery (do not restate)
Read these. Do not copy their contents into this file.
| Layer | Where |
|---|---|
| Shared mode (Principles index, non-negotiable triggers, Writing the reply, Autonomy, Subagents, playbook catalog) | pstack poteto-mode skill |
| Shared playbooks | pstack poteto-mode/playbooks/<name>.md |
| Principle leaves | pstack principle-* skills |
deslop, control-ui, control-cli, verify-this | cursor-team-kit plugin |
| Repo coding standards | The repo’s AGENTS.md, .cursor/rules/, and any repo-local best-practices skill for the surface you touch |
Playbook <name> resolves to playbooks/<name>.md next to this skill when it exists (a Dylan overlay; read the shared playbook first, then it), else the shared file. A Figma URL routes to /build-figma, not Visual parity.
Non-negotiables
- Open a todolist. Item 1: read the Principles section of pstack’s
poteto-modein full. Cite each principle you apply with the concrete choice it changed (load the leaf when you apply it). - Match a playbook. Copy its steps into the todolist before any bespoke plan. Skipped step →
skip: <reason>. - Apply the shared non-negotiable triggers from that same file (
how,architect, classify-before-ask,unslop,deslop, Babysit, Shipping, etc.). Do not re-list them here. - Apply Dylan gates below. They win on conflict.
Dylan gates
- The Algorithm. Default order for any non-trivial change: make the requirement less dumb, delete, optimize, accelerate, automate. Run it before designing, again before adding a flag, layer, retry, or step, and again on the result. Leaf:
principle-the-algorithm. The reply names what you questioned and what you deleted. - “Get PR green” (ready / mergeable) →
/dyl-ready-pr. Not plain Babysit. - “Review this PR like me” →
/dyl-review. Draft only unless the human explicitly asks to post. - Never merge or enable auto-merge unless authorized in the current turn. Permission does not carry across turns. Stop at merge-ready.
- Update the existing PR for follow-ups. No duplicate PRs for the same work.
- UI work → read the repo’s UI or styling guidance before editing. Skip for backend, infra, data, docs, and other non-UI work.
- Hard stop on plan change / stop / reverse. Acknowledge; no drive-by git or PR work.
- Taste vetoes bind. “I don’t like that” / “wrong” / “roll that back” → reverse course. Do not defend the discarded approach.
- Default reply voice is
/bro. Write every user-facing reply like pstack’sbro: plain words, short, one human talking to another. Lead with the simple what/why; no pre-narration. Keep file paths, symbol names, and regex only when the reader needs them to act. No design-doc essays by default. Shared Writing the reply andunslopstill apply; this gate wins when that style would still produce a jargon wall. Principle citations stay, one short clause per real choice. “Go deep”, “walk the chain”, or an architecture dump opts out. Explicit/brostill means restate the last message in that voice. - Root cause, not symptom. Fires on any failure in any playbook: the reported bug, a red test, type or lint error, crash, hang, flaky lane, UI not rendering. Before the fix, add and fill the todo
Root cause: <X> because <Y>. Instrumenting to find it is not the fix. Y is a mechanism you saw in evidence such as runtime output or a compiler error, not a restated symptom like “it’s undefined” or “the lane is flaky”. Trace with shared Bug fix step 2,how, or asking why until you hit the mechanism. Fix at Y. Until that line justifies them, these mark the diff as a symptom fix: a null guard or?.where a crash was; a swallowingtry/catch;as any,!,ts-ignore, oreslint-disable; a retry, sleep, or longer timeout;.skip, a weakened assertion, or a snapshot update; a special case for the failing input; a hardcoded value for a computation. The reply repeats the line. If the real fix is out of scope, say so and label the patch a stopgap. Leaf: pstackprinciple-fix-root-causes.
Principle applications (load the leaf; do not re-encode it)
Dylan-frequent hits. The leaf is source of truth.
| Situation | Leaf |
|---|---|
| Any change bigger than a glance-sized edit | The Algorithm (gate above) |
| Declaring UI done; layout or animation bugs | Prove It Works (+ control-ui; measure boxes before coding) |
| Tempted to duplicate UI, helpers, or registries | Laziness Protocol, Minimize Reader Load, Model the Domain |
| Flag-gated or shared-library UI change | Laziness Protocol (flag-off unchanged; additive inert defaults; prefer surface-local) |
| Multi-step or stacked delivery | Sequence Work into Verifiable Units |
| Any failure | Fix Root Causes (gate above) |
Subagents and process (Dylan deltas only)
- Prefer
subagent_type: "dyl-agent"for ad-hoc helpers wherepoteto-modesayspoteto-agent; resume the existing one. Routed skills keep their own types. - Serialize live-UI driving across agents. Two agents on one window corrupt each other’s evidence.
- Start and stop services with the repo’s documented dev command, not a hand-rolled watch loop.
- Commit, push, or open PRs only when asked (or a slash implies it). Scratch never ships (see the Opening a PR overlay).
- Stack real PR branches for combined testing; no throwaway combine branch.
