pi-unslop-rules

Pi extension. Appends the pstack unslop writing rules to the system prompt every turn, so the model's prose stays free of AI tells for the whole session.

Packages

Package details

extension

Install pi-unslop-rules from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-unslop-rules
Package
pi-unslop-rules
Version
0.1.1
Published
Sep 11, 2026
Downloads
327/mo · 200/wk
Author
derangga
License
MIT
Types
extension
Size
13.7 KB
Dependencies
0 dependencies · 1 peer
Pi manifest JSON
{
  "extensions": [
    "./src/index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-unslop-rules

Keeps the Pi coding agent writing like a person for a whole session, not just for the reply after you ask it to.

It appends the pstack unslop rules to the system prompt on every turn: 31 patterns covering AI vocabulary, em dash overuse, rule-of-three padding, "not just X but Y", title case headings, and the rest.

Installation

pi install npm:pi-unslop-rules

That is the whole setup. There is no config, no command and no toggle. Load the extension and it is on; disable the extension and it is off.

Why not just install unslop as a skill

Pi has a skill system, and unslop is a skill, so this looks like a package that should not need to exist. Two things stop that from working.

Upstream's SKILL.md sets disable-model-invocation: true, and Pi's formatSkillsForPrompt drops those skills from the prompt entirely. They are reachable only through /skill:unslop. Strip the flag and the skill does reach the prompt, but only as a name and a one-line description that the model may or may not act on.

Either way it is opt-in per turn. Writing rules that apply on request are rules that apply to the reply where you remembered to ask.

So this extension takes the one hook that runs every turn:

pi.on("before_agent_start", (event) => ({
  systemPrompt: `${event.systemPrompt}\n\n${UNSLOP}`,
}));

before_agent_start fires after the prompt is assembled and before the agent loop, so the text goes back in after compaction, after /resume, and after a fork. Roughly 1.8k tokens per turn, in the cached part of the prompt.

What it will not touch

The vendored text opens with a scope section that upstream does not have, because upstream assumes you invoke the skill deliberately. Always-on needs a boundary. Code, identifiers, string literals and test fixtures are out. A file with an established style wins over the rules, so a README already in Title Case stays in Title Case. Commit messages following a project convention are out, and so is anything you asked the model to reproduce verbatim.

Credit

The 31 patterns are from pstack by Lauren Tan, MIT licensed, vendored from commit 73f8be4. See src/unslop.md; everything from ## Process down is theirs, verbatim. The persistence and scope sections above it are ours.

License

MIT. Both copyright holders are named in LICENSE; the pstack line has to stay there for the package to be licensed at all.