cleaner
Skill0 starsChanged 4 months agoMITView on GitHub
Поиск и удаление мусорных файлов в проекте — пустые/битые, артефакты сборки, логи, скриншоты, темпы. ЕДИНСТВЕННЫЙ способ удалять мусор: любое удаление мусорного файла идёт через этот скилл, включая уборку перед коммитом. Групповое подтверждение с запоминанием правил. Не путать с wiki-LINT (аудит страниц). Триггеры: убери мусор, почисти проект, почисти мусор, найди мусор, убери временные файлы, cleaner, garbage, junk files, tmp-файлы, а также ЛЮБОЙ момент, когда собрался удалить мусорный файл — `git status` показал лишнее, чистка перед коммитом, пустые файлы/битые имена в корне.
- Reads credentials
3 other projects use a version of this.
Adopted by
Most recently taken up by
- ChrisAraneo/skillstheir own version, first seen Nov 1, 2026
- epoko77-ai/tidy-undotheir own version, first seen Aug 22, 2026
- 0xSero/claude-skill-dirtheir own version, first seen Nov 15, 2025
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- 0xSero/claude-skill-dir★ 4same name
- epoko77-ai/tidy-undo★ 2same name
- ChrisAraneo/skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository7 other files it gives its agents.
- agent-browserSkill
- md-to-pdfSkill
- skill-creatorSkill
- skills-ragSkill
- _TEMPLATESkill
- video-syncSkill
- youtube-studySkill
The file
Files
cleaner — уборщик мусорных файлов
Когда применять
- Явная просьба почистить проект.
- Всегда, когда ты собрался удалить мусорный файл — даже один, даже «по-быстрому»:
git statusпоказал лишнее, уборка перед коммитом, пустой файл в корне, битое имя. Скилл поднимается ДО удаления, а не после (см. правило 0).
Скилл сканирует проект, группирует находки, спрашивает подтверждение по каждой группе и запоминает решения для будущих авточисток.
Правила (must follow)
- Любое удаление мусора — только через этот скилл. Никаких
rm/Remove-Itemмимо него — даже для одного файла, даже когда «очевидно». Ручное удаление обходит подтверждение групп, правилаcleaner_rules.jsonи защиту из правил 6-7 (секреты, значимые пустышки, битые имена), а на битых именах ещё и молча блокируется классификатором. Поднимать скилл ДО первогоrm— типовой промах: увидел мусор вgit statusперед коммитом и удалил руками, не открыв скилл. - Ничего не удалять без подтверждения (кроме групп с сохранённым правилом
auto: true). - Сначала скан, потом план, потом действие. Показать группы → дождаться ответа по каждой → только потом удалять.
- Правила хранить в
data/cleaner_rules.jsonэтого скилла. Формат:{"<project_name>": {"<group_key>": {"auto": true|false, "since": "<date>"}}} - При auto:true — удалять без вопроса, но показывать сводку что удалено.
- Группы, для которых нет правила — всегда спрашивать.
- Не трогать:
.git/,.obsidian/,.env,credentials.*,*.key,*.pem,secrets/, файлы в.gitignoreкроме явно указанных категорий. - Файлы с не-ASCII/битыми именами — отдельная группа
broken_names, всегда ручное подтверждение (auto-правило не применяется — имена разные). Пустые значимые конфиги/код (empty_significant) — тоже вне auto. - Удаление — только через движок
scripts/cleaner.py(Python, не shell). Почему: auto-mode классификатор блокирует shell-команды с битыми/не-ASCII именами в аргументах (Remove-Item/rmс кракозябрами → denied). Python удаляет по абсолютному пути черезos.remove/shutil.rmtree— имена файлов не попадают в argv, классификатор пропускает вызов. Не удалять файлы напрямую через Bash/PowerShell tool.
Движок scripts/cleaner.py
Все скан/удаление идут через него. Всегда печатает JSON в stdout.
На Windows перед вызовом ставить PYTHONIOENCODING=utf-8 (иначе печать битых
имён падает на cp1251-консоли). Интерпретатор — общее окружение скиллов
$env:SKILLS_PY ($SKILLS_RUNTIME/.venv), а не venv проекта: движку хватает
stdlib, но скилл подключён к разным проектам, и проектного venv может не быть.
# Скан → JSON-план (группы, счётчики, имена, размеры)
$env:PYTHONIOENCODING='utf-8'; & $env:SKILLS_PY $SKILLS_HOME/skills\cleaner\scripts\cleaner.py <project_dir> --scan
# Удалить подтверждённые группы (одна или несколько)
$env:PYTHONIOENCODING='utf-8'; & $env:SKILLS_PY $SKILLS_HOME/skills\cleaner\scripts\cleaner.py <project_dir> --delete empty_files broken_names
# Удалить ВЫБОРОЧНО внутри группы (--items: имя или полный путь)
$env:PYTHONIOENCODING='utf-8'; & $env:SKILLS_PY $SKILLS_HOME/skills\cleaner\scripts\cleaner.py <project_dir> --delete empty_significant --items "a.yml" "b.yml"
# Авто-режим: применить сохранённые auto-правила, остальное вернуть в план
$env:PYTHONIOENCODING='utf-8'; & $env:SKILLS_PY $SKILLS_HOME/skills\cleaner\scripts\cleaner.py <project_dir> --autoКлюч правил (--rules) по умолчанию — ../data/cleaner_rules.json рядом со
скриптом.
Группы (классифицирует движок)
| Ключ группы | Что | auto допустим |
empty_files | пустые файлы (0 Б) только в корне проекта, незначимые расширения | да |
empty_significant | пустые .md/.rst/.yml/.yaml/.json/.py/.toml/.ini/.cfg/.sql | нет — всегда ручное |
broken_names | битые имена: псевдографика (U+2500–U+259F), control-символы, �, несбалансированные скобки, ведущий/хвостовой пробел | нет — всегда ручное |
build_artifacts | __pycache__, *.pyc/*.pyo, dist/build/.eggs/*.egg-info, .pytest_cache/.mypy_cache | да |
mcp_artifacts | снимки сессий браузерных MCP внутри .playwright-mcp/, .puppeteer-mcp/: page-*, console-*, trace-*, snapshot-*, network-* (.yml/.log/.png/.zip). Каталог целиком НЕ удаляется | да |
heavy_envs | рабочие окружения: .venv/.venv_s3/.venv_ai/.dbt_venv/venv, node_modules, .rag_cache | нет — всегда ручное |
logs_screenshots_root | *.log и *.png/*.jpg/*.jpeg в корне (кроме *.banner.*, *.icon.*, README) | по проекту |
temp_files | *.tmp/*.temp/*.bak/*.swp/*.swo, *~, .DS_Store, Thumbs.db | да |
heavy_envs — рабочие окружения, а не мусор. Движок держит их отдельной группой и
никогда не включает в build_artifacts: до 2026-07-16 venv классифицировались как
build_artifacts, и --delete build_artifacts сносил боевые окружения (в корп-проекте это
~3 ГБ: три venv из CLAUDE.md + node_modules), а защита держалась лишь на внимательности
вызывающего. Группу показывать в плане как справку и никогда не предлагать к удалению без
явного запроса пользователя — их снос ломает проект и стоит часы переустановки.
.playwright-mcp/ — не сплошной мусор. Рядом со снимками там живут chrome-profile
(cookies и авторизации — их снос означает переавторизацию везде) и сохранённые пользователем
страницы/PDF. Движок с 2026-07-20 спускается внутрь и берёт только файлы по шаблону снимка,
профили пруним, остальное не трогает. Не предлагать удаление MCP-каталога целиком.
Пустышки движок чистит только в корне — 0-байтные файлы глубже (в logs/,
store/, data/) обычно runtime-данные фич, не мусор скилла.
Грабли: пустой файл ≠ мусор. empty_significant — это группа «посмотри глазами», а не
«удали». Проверяй КАЖДЫЙ файл до удаления: 0 байт бывает у сломанного конфига, который надо
восстановить, а не снести. Реальные случаи корп-проекте (16.07.2026):
.claude/rules/auto-invoke.md— пуст, но на него ссылается CLAUDE.md («Таблица триггеров»). Удалить = закрепить поломку вместо починки. Правильный ответ — сообщить пользователю.src/zrepamak/logs/query_log.sql— пуст, лежит вlogs/робота: может создаваться кодом при запуске. Цена ошибки выше выгоды от 0 Б. Ищи, кто ссылается на файл (grep по имени), прежде чем предлагать удаление.
Процедура
- Скан:
& $env:SKILLS_PY <cleaner>\scripts\cleaner.py <проект> --scan→ распарсить JSON-план. - План: показать группы (счётчик + имена + размер). Смешанные группы разбирать
поштучно, а не целиком: в
empty_significant/broken_namesрядом с мусором лежат файлы, которые трогать нельзя (см. грабли ниже) — для них--delete <группа> --items <имена>, остальные элементы уйдут вskipped. Для каждой группы спроситьУдалить группу X? [y/n/auto]:y— удалить сейчас;n— пропустить;auto— удалить сейчас И запомнить правило (кромеbroken_namesиempty_significant— им auto недоступен).
- Удаление:
& $env:SKILLS_PY <cleaner>\scripts\cleaner.py <проект> --delete <группы>для подтверждённыхy/auto. Показать сводку из JSON (что удалено, байт). - Сохранение правил: обновить
data/cleaner_rules.jsonдля групп сauto. Формат:{"<project>": {"<group>": {"auto": true, "since": "<date>"}}}. Ключ проекта = имя каталога.broken_names/empty_significantв auto не пишем (движок их всё равно отфильтрует).
Данные
Перед работой: git -C $SKILLS_HOME pull. При активации допиши строку
<дата> cleaner <проект> в data/usage.log.
Правила: data/cleaner_rules.json — git add + commit + push после изменений.
Обратная связь
Если пользователь недоволен работой скилла — немедленно:
- Прочитай последние ~20 строк CHANGELOG.md — нет ли уже такой жалобы
- Спроси: что ожидал, что получил, что поправить
- Исправь SKILL.md (только инструкция) и допиши правку в конец CHANGELOG.md:
`
YYYY-MM-DD
- Запрошено: <что просил пользователь>
- Изменено: <что конкретно поправлено в SKILL.md> `
- Commit + push обоих файлов в master
CHANGELOG.md читается только с конца (последние записи) — не грузи весь в контекст.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

