Reduce codebase slop by deleting code, flattening abstractions, and replacing custom helpers/types/assertions with native SDK/npm helpers or straightforward schemas (for example Zod).

AGPL-3.0Auto-check passedFrontend & Design

Install Desloppify

skills CLI
$ npx skills add databuddy-analytics/Databuddy --skill desloppify -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install databuddy-analytics/Databuddy desloppify --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/databuddy-analytics/Databuddy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/desloppify .claude/skills/desloppify && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
desloppify
GitHub stars
1.2k
Token cost
~2.7k tokens
SKILL.md length
1,403 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Reduce codebase slop by deleting code, flattening abstractions, and replacing custom helpers/types/assertions with native SDK/npm helpers or straightforward schemas (for example Zod).

  • Works in 6 steps: correctness → simplicity → deletion → …
  • Asked to simplify
  • SKILL.md covers When to Use, Repository Overrides, Value Order and Modes, plus 13 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Desloppify is an agent skill from databuddy-analytics/Databuddy. Reduce codebase slop by deleting code, flattening abstractions, and replacing custom helpers/types/assertions with native SDK/npm helpers or straightforward schemas (for example Zod). Use when asked to simplify, delete code, or "desloppify" TypeScript/Bun/Nuxt code.

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Forms and validation. It works with Zod, TypeScript, npm and Nuxt. The repository describes itself as: Open-source product analytics for startups: track visitors, events, funnels, and goals without cookies, and ask Databunny, the built-in AI analyst. Uptime, feature flags, and… The licence is AGPL-3.0.

When your agent uses it

  • Asked to simplify
  • Desloppify TypeScript/Bun/Nuxt code

Example prompts

  • “desloppify”
  • “/desloppify”

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. correctness
  2. simplicity
  3. deletion
  4. native/package-native solutions
  5. reuse
  6. type neatness

What it can do on your machine

Read from SKILL.md and the folder at commit 5f63610. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Desloppify loads about 2.7k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,403 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from databuddy-analytics/Databuddy at commit 5f63610, republished under its AGPL-3.0 licence (© databuddy-analytics). 1,403 words, ~2,696 tokens.

Download SKILL.mdSave it as .claude/skills/desloppify/SKILL.md (or your agent's skills folder).
name
desloppify
description
Reduce codebase slop by deleting code, flattening abstractions, and replacing custom helpers/types/assertions with native SDK/npm helpers or straightforward schemas (for example Zod). Use when asked to simplify, delete code, or "desloppify" TypeScript/Bun/Nuxt code.

Desloppify

Use this skill for refactor passes where the main target is less code and clearer boundaries.

Primary objective:

  • remove more code than you add, without regressing behavior or coverage
  • make the resulting code more direct, less layered, and easier to read locally

When to Use

Trigger this skill when the user asks for:

  • "desloppify"
  • removing slop, boilerplate, or over-engineering
  • replacing custom helpers/types/mappings with native package features
  • removing TypeScript assertions and inference workarounds

Repository Overrides

Always follow repository-level agent rules (for example AGENTS.md) when they are stricter than this skill.

Value Order

During a desloppify pass, use this priority order:

  1. correctness
  2. simplicity
  3. deletion
  4. native/package-native solutions
  5. reuse
  6. type neatness

Interpretation:

  • pragmatism is allowed only inside this ordering
  • do not use "pragmatic" as a reason to add a new helper, facade, abstraction layer, or generic utility when simpler local code is sufficient
  • if correctness requires added code at a boundary, offset it by deleting incidental complexity in the same area when practical

Modes

Use one mode per pass:

  1. Core mode (default)
  • for most desloppify requests
  • optimize for speed and high signal
  1. Deep mode (high-risk)
  • use for auth/billing/workflows/streaming/data migrations or broad cross-layer refactors
  • adds invariants, rubric, and full verification matrix

Slop Indicators

Prioritize files with:

  • large modules doing multiple jobs
  • custom helper stacks that wrap package-native behavior
  • custom mapping layers where Zod/schema parsing would be clearer
  • custom type aliases duplicating SDK/Drizzle/inference-client contracts
  • repeated as assertions, especially double-casts (as unknown as)
  • duplicate or near-duplicate functions that differ only in small branches
  • mirrored state (ref/useState) that can be derived from existing source state
  • conditional rendering that causes layout shift — if (isPending) return null or if (!data) return null for UI that occupies space. Always render a skeleton/placeholder with the same dimensions instead. return null is only acceptable for truly optional UI that doesn't affect layout (e.g. a badge that may or may not appear)
  • magic string identity fallbacks — userId = x ?? y ?? "api-key" or ?? "unknown" or ?? "" where a real ID is required. If a value must exist, guard and fail; never silently degrade to a shared string that corrupts rate limits, billing, and audit trails
  • permission checks missing organizationId — every hasPermission call MUST pass organizationId explicitly. Omitting it lets Better-Auth fall back to the session's activeOrganizationId, enabling cross-org access
  • protectedProcedure on session-only handlers — if a handler dereferences context.user.id/.email/.name without a null check, it must use sessionProcedure (API keys have context.user = undefined)
  • org-level-only API key checks — apiKey.organizationId === resource.organizationId without scope enforcement (hasKeyScope, getAccessibleWebsiteIds, hasWebsiteScope) lets any org key access any resource in the org regardless of intended restrictions

Core Mode (Default)

Apply these non-negotiables:

  • prefer native SDK/npm helpers over custom helpers
  • parse untrusted boundary input with Zod (or existing boundary schema)
  • derive types from source-of-truth types/schemas instead of writing parallel interfaces
  • remove avoidable assertions (as, especially as unknown as)
  • merge/delete duplicate helpers and thin wrappers
  • infer state instead of mirroring it
  • keep one source of truth per concern
  • replace, then delete obsolete code in same pass
  • reduce concepts and lines, not just move code around
  • keep behavior stable and tests green
  • prefer inlining over extraction during a cleanup pass
  • do not optimize for future reuse unless it clearly deletes more code than it adds
  • default outcome should be negative LOC; if not, treat the pass as suspect and justify why
  • if a refactor adds safety code, run a follow-up compression pass before calling the work done

Core execution order:

  1. scan hotspots (duplicate helpers, assertions, manual mappings, mirrored state)
  2. identify native/schema replacement primitives
  3. refactor call-sites, then delete old helpers/types
  4. remove any new wrapper/helper that is not strictly necessary
  5. run required QA gates and report net reduction/results

Deep Mode (High-Risk)

Use this when touching sensitive or cross-layer behavior.

Track Selection (Required in Deep Mode)

Choose one or more tracks before editing:

  1. UI/state track
  2. API/boundary track
  3. Data/Drizzle track
  4. Cross-layer integration track

If multiple tracks apply, run in this order: API/boundary -> Data/Drizzle -> UI/state -> integration validation.

Invariant-First Refactor (Required in Deep Mode)

Before refactoring:

  • list invariants that must remain true (contracts, ordering, auth, billing semantics, UX states)
  • perform refactor
  • prove invariants with tests or explicit checks
Quality Rubric (Required Before Done in Deep Mode)

Confirm all are satisfied:

  • correctness: no behavior/regression drift beyond intended scope
  • boundary safety: untrusted input validated at edges
  • type integrity: no avoidable assertions or inference bypasses
  • simplicity: fewer concepts/helpers/types than before
  • test confidence: relevant verification layers executed

Required Patterns

Prefer Native Over Custom
  • do not write custom utilities if package-native behavior already solves it
  • avoid creating custom "normalizer" types when SDK/DB types can be derived directly
  • prefer direct code at the call-site over a new shared helper when the logic is short and local
Prefer Zod Over Manual Mapping
  • use z.object, z.enum, preprocess, and transform for inbound payload normalization
  • infer types from schemas (z.infer) instead of parallel hand-written interfaces
  • centralize shared request/response schemas where multiple call-sites parse the same shape
Drizzle Typing
  • derive row types from schema:
    • typeof table.$inferSelect
    • typeof table.$inferInsert
  • do not cast inserted/selected rows when derivation can model it directly
Show full SKILL.md (562 more words)Show less
Inference Client Typing
  • parse unknown JSON payloads through explicit object guards/schema helpers
  • avoid structural casts of parsed responses
  • keep event parsing runtime-safe and typed at the boundary
Duplicate Function Policy
  • before writing a helper, search for equivalent behavior in:
    • local module
    • shared utils
    • package SDK/native APIs
  • prefer deleting both helpers and writing one direct local implementation if that is simpler than introducing another shared abstraction
  • if two helpers share most logic, merge to one implementation with explicit params
  • delete thin wrappers that only rename args or forward calls unchanged
  • no duplicate helper/functions in the same slice unless a clear boundary requires it
  • if duplication remains, document why it is intentional

Anti-Abstraction Policy

During a desloppify pass, these are presumed wrong unless clearly justified:

  • new facades around test doubles or mocks
  • new "shared" helpers introduced only to avoid a few repeated lines
  • generic parser/normalizer utilities when a local schema or direct check is clearer
  • helper extraction that makes the reader jump across files for short logic

Use this rule:

  • prefer a little duplication over a new abstraction
  • only introduce a helper when it removes more total code and concepts than it introduces
  • if the branch becomes materially larger, do another pass focused only on deletion and inlining

Assertion Policy

  • forbidden: as unknown as, as any, broad structural casts to force compatibility
  • allowed: as const for literal narrowing
  • rare escape hatches must be documented inline with a concrete reason

State Inference Policy

  • derive from strongest source first:
    • persisted/server/DB truth
    • route/query params
    • schema-validated payloads
    • local transient UI state
  • avoid storing derivable values (counts, flags, filters, status labels) as mutable state
  • when state must exist, store minimal primitives and derive the rest
  • mirrored state is only allowed with explicit justification (performance or lifecycle boundary)

Boundary Contract Policy

  • parse external input once at the boundary (query/body/headers/events/webhooks)
  • pass inferred typed payloads inward; do not re-parse/re-map at each layer
  • keep boundary schema close to endpoint/adapter and shared only when reused

Verification Matrix (Required in Deep Mode)

Map changed files to required test layers:

  • local utility/component logic -> unit
  • API handlers/data access/boundary parsing -> integration
  • queue/workflow/stream/state lifecycle changes -> integration + e2e
  • auth/billing/permission/routing behavior -> integration + e2e

Fast Discovery Pass

Before refactoring, run quick scans:

  • duplicate candidates: repeated function names or repeated logic blocks
  • assertion hotspots: as, as unknown as, broad casts
  • schema drift: hand-written interfaces near existing Zod/SDK/Drizzle types
  • mirrored state: watchers that only assign one variable to another

Quality Gate

After code changes (non-markdown), run:

  • format/fmt
  • lint
  • typecheck
  • unit tests
  • integration tests
  • e2e tests

If any layer is blocked by environment, record the exact blocker and still run all remaining layers.

Desloppify Failure Modes

Treat the pass as failing its goal if any of these are true:

  • the branch adds more helpers/facades than it deletes
  • net LOC increases without a narrow, concrete boundary-safety justification
  • code becomes more reusable but not simpler
  • local readability gets worse because logic moved into generic utilities
  • the result is "cleaner architecture" but not more straightforward code

Output Checklist

Report:

  1. what was deleted/replaced
  2. where assertions were removed
  3. net line-count impact
  4. if net LOC increased, explain exactly why and what compression pass was attempted
  5. duplicate helpers/functions merged or removed
  6. state that is now inferred instead of mirrored
  7. mode used (Core or Deep) and why
  8. invariants checked and how they were validated (required in Deep mode)
  9. QA results and any environment blockers

© databuddy-analytics, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/desloppify of databuddy-analytics/Databuddy.

Open the folder on GitHubat commit 5f63610

Compare with similar skills

Desloppify next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Desloppify compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Desloppify this skilldatabuddy-analytics/Databuddy1.2k—~2.7kAutomated safety check: PassAGPL-3.0
Create Docsvictorgarciaesgi/nuxt-typed-router4132 repos~2.8kAutomated safety check: PassMIT
Mastra Honojwynia/agent-skills166—~2.9kAutomated safety check: PassMIT
Zod Validation Expertdavila7/claude-code-templates32k3 repos~2.4kAutomated safety check: PassMIT
Nuxt Contentsecondsky/claude-skills227—~4.3kAutomated safety check: PassMIT
Shadcn UIjh941213/my-cc-harness1264 repos~9.7kAutomated safety check: NotesMIT

Similar skills

  • Create Docs

    victorgarciaesgi/nuxt-typed-router

    Create complete documentation sites for projects. An agent skill from victorgarciaesgi/nuxt-typed-router.

    413 GitHub starsUsed in 2 repos~2.8k tokens
    Frontend & DesignAuto-check passed
  • Mastra Hono

    jwynia/agent-skills

    Develop AI agents, tools, and workflows with Mastra v1 Beta and Hono servers.

    166 GitHub stars~2.9k tokensUpdated 7 mo ago
    Frontend & DesignAuto-check passed
  • Zod Validation Expert

    davila7/claude-code-templates

    Expert in Zod — TypeScript-first schema validation. An agent skill from davila7/claude-code-templates.

    32k GitHub starsUsed in 3 repos~2.4k tokens
    Frontend & DesignAuto-check passed
  • Nuxt Content

    secondsky/claude-skills

    Nuxt Content v3 Git-based CMS for Markdown/MDC content sites.

    227 GitHub stars~4.3k tokensUpdated 9 days ago
    Frontend & DesignAuto-check passed
  • Shadcn UI

    jh941213/my-cc-harness

    Complete shadcn/ui component library guide including installation, configuration, and implementation of accessible React components.

    126 GitHub starsUsed in 4 repos~9.7k tokens
    Frontend & DesignAuto-check: notes
  • Nuxt Code Editor

    CaoMeiYouRen/caomei-auth

    设计或实现 Vue 3、Nuxt 组件、页面、样式、交互、表单、状态绑定与 i18n 文本时使用。负责前端界面与交互的完整实现流程(目标确认、结构设计、实现约束、视觉验证),并遵循项目标准(PrimeVue、SCSS BEM、@mdi/font、Zod)。用户提到 component、page、UI、frontend、form、responsive、SCSS、BEM、i18n、设计落地时都应触发。

    220 GitHub stars~437 tokensUpdated 7 days ago
    Frontend & DesignAuto-check passed

More from databuddy-analytics/Databuddy

All 8 skills in this repo
  • Databuddy

    databuddy-analytics/Databuddy

    Integrate Databuddy analytics using the SDK, REST API, or MCP.

    1.2k GitHub stars~2.1k tokensUpdated today
    Auto-check passed
  • Chat SDK

    databuddy-analytics/Databuddy

    Build multi-platform chat bots with Chat SDK (chat npm package).

    1.2k GitHub stars~2.6k tokensUpdated today
    Auto-check passed
  • Databuddy

    databuddy-analytics/Databuddy

    Help external users integrate Databuddy into their own apps.

    1.2k GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Typescript Bun Drizzle Quality

    databuddy-analytics/Databuddy

    Build or review Bun fullstack TypeScript code with Drizzle-backed SQL.

    1.2k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Vertical Slices

    databuddy-analytics/Databuddy

    Design, implement, and review software using vertical slices (feature-first architecture) instead of horizontal layers.

    1.2k GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Databuddy Internal

    databuddy-analytics/Databuddy

    Work inside the Databuddy monorepo for internal implementation, debugging, review, and refactoring.

    1.2k GitHub stars~11k tokensUpdated today
    Auto-check: notes

Questions about Desloppify

What does Desloppify do?

Reduce codebase slop by deleting code, flattening abstractions, and replacing custom helpers/types/assertions with native SDK/npm helpers or straightforward schemas (for example Zod). Desloppify is an agent skill from databuddy-analytics/Databuddy. Reduce codebase slop by deleting code, flattening abstractions, and replacing custom helpers/types/assertions with native SDK/npm helpers or straightforward schemas (for example Zod).

When should I use Desloppify?

Desloppify fits situations like: asked to simplify; desloppify TypeScript/Bun/Nuxt code.

How do I install Desloppify in Claude Code?

Run `npx skills add databuddy-analytics/Databuddy --skill desloppify -a claude-code`. Or copy the skill folder (.agents/skills/desloppify in databuddy-analytics/Databuddy) into .claude/skills/desloppify in your project. Claude Code loads it when a task matches its description.

How do I install Desloppify in Codex?

Run `npx skills add databuddy-analytics/Databuddy --skill desloppify -a codex`. Or copy the skill folder (.agents/skills/desloppify in databuddy-analytics/Databuddy) into .agents/skills/desloppify in your project. Codex loads it when a task matches its description.

Can I use Desloppify in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add databuddy-analytics/Databuddy --skill desloppify -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/desloppify, .gemini/skills/desloppify, .github/skills/desloppify and .opencode/skills/desloppify in your project.

What does Desloppify need to run?

SKILL.md names no scripts, command-line tools or credentials: Desloppify is instructions for the agent only.

Does Desloppify access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Desloppify safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Desloppify use?

Desloppify is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Desloppify use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Desloppify?

Skills that share tags, products or a category with Desloppify: Create Docs (victorgarciaesgi/nuxt-typed-router, 413 stars), Mastra Hono (jwynia/agent-skills, 166 stars), Zod Validation Expert (davila7/claude-code-templates, 32k stars) and Nuxt Content (secondsky/claude-skills, 227 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Desloppify?

databuddy-analytics (a GitHub organization) maintains it in databuddy-analytics/Databuddy, which has 1,177 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 7, 2026.

Source: databuddy-analytics/Databuddy on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.