vs-deslop
Use when code works but feels AI-generated, bloated, repetitive, over-defensive, or needs cleanup before review or shipping.
Skill by vltansky
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/vltansky-vs-deslop
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/vs-deslop
What's inside
- Skill name
vs-deslop- Description
- Use when code works but feels AI-generated, bloated, repetitive, over-defensive, or needs cleanup before review or shipping.
- License
- MIT
- Instructions
- 178 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Files (65)
- LICENSE.anti-slop
- LICENSE.oxlint-plugin-inhuman
- SKILL.md
- openai.yaml · agents/
- anti-slop-effect.oxlintrc.json · scripts/
- anti-slop.oxlintrc.json · scripts/
- load-ts.mjs · scripts/
- reject-anti-slop.mjs · scripts/
- reject-code-slop.mjs · scripts/
- run-anti-slop.mjs · scripts/
- ts-hooks.mjs · scripts/
- anti-slop.static.eval.ts · test/
- anti-slop-bad.ts · test/fixtures/
- anti-slop-good.ts · test/fixtures/
- anti-slop-note.md · test/fixtures/
- ceremony-wrapper.ts · test/fixtures/
- clean-add.ts · test/fixtures/
- comment-only-canary.ts · test/fixtures/
- consumer-pkg-skill.md · test/fixtures/
- deslop-targets-bad.ts · test/fixtures/
- hash-only-skill.md · test/fixtures/
- leftover-oxlint-bad.ts · test/fixtures/
- mention-only-inherit-hash-skill.md · test/fixtures/
- mention-only-inherit-skill.md · test/fixtures/
- no-names-skill.md · test/fixtures/
- oxlint-prose-hash-skill.md · test/fixtures/
- oxlint-prose-skill.md · test/fixtures/
- paragraph-paste-hash-skill.md · test/fixtures/
- paragraph-paste-skill.md · test/fixtures/
- SKILL.md · test/fixtures/published-pair/
- reject-anti-slop.mjs · test/fixtures/published-pair/scripts/
- second-miss-after-pass.ts · test/fixtures/
- try-catch-theater.ts · test/fixtures/
- whole-tree-skill.md · test/fixtures/
- peer-skills-iter.static.eval.ts · test/
- peer-skills.static.eval.ts · test/
- vs-deslop.static.eval.ts · test/
- PINNED · vendor/anti-slop/
- index.ts · vendor/anti-slop/src/effect/
- no-service-constructor-imports.ts · vendor/anti-slop/src/effect/rules/
- index.ts · vendor/anti-slop/src/
- no-chained-type-assertions.ts · vendor/anti-slop/src/rules/
- no-conditional-empty-object-spread.ts · vendor/anti-slop/src/rules/
- no-known-value-widening.ts · vendor/anti-slop/src/rules/
- no-module-mocking.ts · vendor/anti-slop/src/rules/
- no-object-parameters.ts · vendor/anti-slop/src/rules/
- no-reflect-apply.ts · vendor/anti-slop/src/rules/
- no-reflect-get.ts · vendor/anti-slop/src/rules/
- no-runtime-typeof.ts · vendor/anti-slop/src/rules/
- no-shape-in-symbol-names.ts · vendor/anti-slop/src/rules/
- no-unknown-parameters.ts · vendor/anti-slop/src/rules/
- no-unknown-returns.ts · vendor/anti-slop/src/rules/
- no-unknown-type-aliases.ts · vendor/anti-slop/src/rules/
- no-unsafe-dictionary-type.ts · vendor/anti-slop/src/rules/
- no-widen-then-assert.ts · vendor/anti-slop/src/rules/
- require-safety-comment-for-type-assertion.ts · vendor/anti-slop/src/rules/
- dictionary-types.ts · vendor/anti-slop/src/shared/
- lexical-type-parameters.ts · vendor/anti-slop/src/shared/
- reflect-method.ts · vendor/anti-slop/src/shared/
- PINNED · vendor/oxlint-plugin-inhuman/
- …and 5 more
SKILL.md (first lines)
# Deslop
Clean working code without changing behavior. This is the focused cleanup
building block: remove AI-ish noise, needless abstraction, duplicated logic,
stale fallbacks, and review-hostile clutter while preserving the product
contract.
Use [`vs-ponytail`](../vs-ponytail/SKILL.md) in composed mode to prefer
structural deletion and native or existing capabilities over a new
cleanup abstraction.
## Flow Contract
- **Kind:** Building block
- **Inputs:** Changed files or explicit scope, behavior that must stay unchanged, and available verification commands
- **Outputs:** Cleanup summary, changed files, behavior-preservation evidence, and deferred findings
- **Status:** `CLEAN`, `CLEANED`, `WARN`, `FAIL`, or `BLOCKED`
- **Consumers:** `vs:roast-code` Pass 1, `vs:build-it` Phase 4, `vs:ship-it` pre-PR review, standalone cleanup requests
- **Skip conditions:** Skip when the diff is trivial, generated-only, or the user explicitly asks for review-only/no edits
## Cleanup Targets
Inspect the requested scope for:
- flatten first: delete down to one layer. A new wrapper, helper, file,
or mode flag is not a cleanup
- structural simplifications that delete whole concepts, branches, modes,
wrappers, or layers instead of merely polishing them
- duplicate logic or copy-paste with tiny variations
- one job per unit: do not restate the same logic in many layers
- unnecessary `async`/`await` or Promise wrapping around sync work
- pass-through wrappers that add no meaning
- ceremony types and files (`Manager`, `Service`, `Factory`, `Helper`,
`Utils`) that exist for a single call, plus config objects wrapping two
or three parameters and boolean mode flags that split one path
- a single-use extract: a helper with one call site that only moved lines
- a helper or type that fails the **portability test**: if it could move to
another repo unchanged, it is generic filler, not this product's logic
- synonym cycling of the same domain concept (rotating the name across
layers: user / account / customer for one entity)
- defensive null checks on values proven non-null by types or callers
- fallback branches that hide primary-path failures
- silent defaults and optional chaining that hide missing required data:
`?.` on a required field, `?? []`, `?? {}`, or `|| default` that papers
over an invariant the caller should have supplied
- try/catch theater: a try/catch around non-throwing code, an empty catch,
or a catch that logs and swallows a real failure
- `any`, a non-null assertion (`!`), and an uncommented type assertion
that fabricates evidence
- comments that narrate obvious code, hand-holding notes, and JSDoc that
is only restating the signature
- dead imports, stale flags, temporary debug leftovers, `console.log` /
`console.debug` / `console.info` left in production paths, and a stale
TODO fossil
- inconsistent naming or one-off conventions that fight the codebase
- ad-hoc conditionals bolted into busy flows where a typed model, dispatcher,
policy object, or canonical helper would make the path easier to reason about
- cast-heavy or optionality-heavy boundaries that hide the real invariant,
in particular:
- `unknown` or `object` in a signature where the caller already knows the type
- `Record<string, unknown>` and equivalents standing in for an owned contract
- chained assertions (`value as object as User`) that fabricate evidence
- widening a known value and asserting it back later
- a broad annotation where `satisfies` would preserve the inferred keys
- ad-hoc `typeof` narrowing where the value should be parsed once at the
boundary
Run `skills/vs-deslop/scripts/reject-code-slop.mjs` on each in-scope file
before reporting `CLEAN` or `CLEANED`. Exit 1 is a catalog fail.
Then run the on-demand anti-slop file pass on the same in-scope TS/JS
files (named files only — not a whole-repo lint, and do not write
`oxlint.config` into the consumer repo):
```bash
node skills/vs-deslop/scripts/run-anti-slop.mjs <file.ts> [file.ts ...]
```
That command runs oxlint with the vs-owned config on named files:
the vendored generic anti-slop rules, `eslint/no-useless-catch`,
`eslint/no-console` (`console.error` and `console.warn` allowed),
`eslint/no-empty`, `eslint/no-unused-vars`, `eslint/require-await`,
`typescript/no-explicit-any`, `typescript/no-non-null-assertion`,
`unicorn/no-useless-fallback-in-spread`, `unicorn/no-unnecessary-await`,
`inhuman/no-empty-wrappers`, and `inhuman/no-swallowed-catch`. Exit 1
is a catalog fail (not `CLEAN`). If oxlint or the plugin cannot run,
report `WARN` or `BLOCKED` — do not pretend `CLEAN`. Enable the Effect
rule only when the target repo uses Effect. No-args, a directory, or
zero JS/TS names among args is not a pass (not `CLEAN`). Do not write
`oxlint.config` or `node_modules` into the consumer cwd. Do not spawn
a consumer package CLI.
Score the file pass with `skills/vs-deslop/scripts/reject-anti-slop.mjs`
(identity `9f42cf49e0a4ee9de516dbacbac04e687a0b7ed39e117d23d409555f45e18ef8`;
exit 1 is a fail). Exclusive is the live `skills/vs-deslop/SKILL.md` path
or a published skill-bytes pair. Exclusive cases live under `test/fixtures`.
## Procedure
**Exclusive order:** Lock behavior first, then collect →
validate/discard FP → surgical delete → verify → rescan.
Do not skip or invert these.
1. **Lock behavior first.** Identify the existing tests or direct checks that
prove behavior. If none exist and cleanup could change behavior, add the
narrowest regression test before editing. Do not invent types, files,
flags, or behavior "for cleanliness."
2. **Collect candidates. Do not edit yet.** Name each smell, its category,
the invariant or call site, and the file it affects. Do not broaden
scope just because adjacent code is ugly.
3. **Validate each candidate.** Keep a change only when it is formula, not a
necessary defense (auth, validation at a trust boundary, required error
handling). A false positive that deletes a real guard is worse than one
leftover tell. Discard it and say why.
4. **Flatten first.** The first cleanup move is one-layer delete. Before
extracting a helper, ask whether a simpler state shape, ownership
boundary, or default flow would remove the branch/helper/wrapper
entirely. One clean delete beats three clumsy rewrites. Do not clean
by adding a wrapper, helper, file, or mode flag.From vltansky/vs, MIT.
More from vltansky/vs
- 0.570score
vs-disk-cleanup
vltansky
Free disk space left behind by coding agents: stale git worktrees (t3code, Codex, Claude Code), old vs session artifacts under ~/.vs, and home-folder dev…
SkillAFreshness: AClaude Code +9 - 0.570score
vs-improve
shadcn
Survey any codebase as a senior advisor and produce prioritized, self-contained implementation plans for OTHER models/agents to execute.
SkillAFreshness: AClaude Code +9 - 0.570score
vs-explain-video
vltansky
Make a short narrated motion explainer video about a topic, code path, or PR.
SkillAFreshness: AClaude Code +9 - 0.570score
vs-explain-pr
vltansky
Make a short narrated video explainer of an open PR from its base...head diff, finished body, and evidence media, then add it to the PR body.
SkillAFreshness: AClaude Code +9 - 0.569score
vs-baby-sit
vltansky
Use when asked to watch a PR, fix CI, address review comments, or keep a branch merge-ready in a loop.
SkillAFreshness: AClaude Code +9 - 0.567score
vs-internal-shared
vltansky
Internal reference for vs shared conventions: artifact paths, project ID resolution, storage preference, and skill taxonomy.
SkillAFreshness: AClaude Code +9 - 0.565score
vs-explain-back
vltansky
Use when the user types /vs-explain-back, or asks you to explain back, teach back, mirror, or restate their messy multi-message explanation as a clean…
SkillAFreshness: AClaude Code +9 - 0.565score
vs-eli5
vltansky
Explain a topic like I'm a 5 year old.
SkillAFreshness: AClaude Code +9 - 0.565score
vs-before-after
vltansky
Use when asked for before and after, the functional difference, what behavior changed, or the user value of a branch, PR, commit, or working-tree diff.
SkillAFreshness: AClaude Code +9 - 0.555score
vs-bugfix
vltansky
Use when the user says fix, bugfix, broken, or describes a bug.
SkillAFreshness: AClaude Code +9 - 0.529score
vs-architect
vltansky
Use when asked to improve a codebase's architecture, find refactoring or consolidation opportunities, deepen shallow modules, reduce coupling, clarify seams…
SkillBFreshness: BClaude Code +9 - 0.529score
vs-fix-pr
vltansky
Primary VS workflow whenever the user asks to see, check, review, address, or fix a PR, its comments or feedback, or its failing CI; handle requested changes…
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 1
- Open issues
- 1
- Last commit (this folder)
- Sep 24, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/vltansky/vs
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from vltansky
- 0.570score
vs-explain-video
vltansky
Make a short narrated motion explainer video about a topic, code path, or PR.
SkillAFreshness: AClaude Code +9 - 0.570score
vs-disk-cleanup
vltansky
Free disk space left behind by coding agents: stale git worktrees (t3code, Codex, Claude Code), old vs session artifacts under ~/.vs, and home-folder dev…
SkillAFreshness: AClaude Code +9 - 0.570score
vs-explain-pr
vltansky
Make a short narrated video explainer of an open PR from its base...head diff, finished body, and evidence media, then add it to the PR body.
SkillAFreshness: AClaude Code +9 - 0.569score
vs-baby-sit
vltansky
Use when asked to watch a PR, fix CI, address review comments, or keep a branch merge-ready in a loop.
SkillAFreshness: AClaude Code +9 - 0.567score
vs-internal-shared
vltansky
Internal reference for vs shared conventions: artifact paths, project ID resolution, storage preference, and skill taxonomy.
SkillAFreshness: AClaude Code +9 - 0.565score
vs-eli5
vltansky
Explain a topic like I'm a 5 year old.
SkillAFreshness: AClaude Code +9
Cite this page
vs-deslop skill. Agent Mart. https://agentmart.dev/skills/vltansky-vs-deslop (last updated 2026-10-24)