cleanup-workflows — скилл для Claude Code: чистка воркфлоу в HubSpot
Находит в HubSpot воркфлоу, которые никогда не запускались, отключены больше 90 дней или остались от тестов, и помогает их удалить.
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a claude-codeЧто делает cleanup-workflows
Скилл проводит аудит автоматизаций HubSpot и убирает мёртвый груз из дашборда. Сначала он выгружает все воркфлоу через v4 Automation API и записывает по каждому ID, имя, статус включения, тип, дату создания и последнего обновления. Потом помечает кандидатов на удаление: отключённые 90+ дней, с нулём зачислений за всё время, с именами вроде «test» или «copy of», заменённые новыми версиями, а также те, что стабильно падают с ошибкой.
Перед удалением скилл проверяет, не запускает ли этот воркфлоу другой воркфлоу, не задаёт ли он свойства, от которых зависят остальные, и нет ли ссылок на него в документации. Список кандидатов показывается вам, и без явного подтверждения ничего не удаляется. Дальше по умолчанию предлагается схема «сначала архив»: выключить, подождать неделю, потом удалить через DELETE /automation/v4/flows/{flowId} или в интерфейсе. Для выключения через API нужен текущий revisionId.
Понадобится сервисный ключ HubSpot с областью automation — HUBSPOT_ACCESS_TOKEN в .env, подойдёт и старый токен приватного приложения. Нужен Python 3.10+ с uv. На части тарифных планов Automation API отвечает 403 — тогда аудит придётся делать руками в разделе Automation > Workflows. Удалённые воркфлоу в HubSpot не восстанавливаются, поэтому скилл советует сначала прогнать /workflows-as-code и сохранить JSON-выгрузку: по ней воркфлоу можно пересоздать через POST /automation/v4/flows.
Какие задачи решает
- выгрузить список всех воркфлоу HubSpot с датами и статусами
- отделить тестовые воркфлоу от рабочих автоматизаций
- найти воркфлоу, отключённые больше 90 дней назад
- проверить, не зависит ли другой воркфлоу от удаляемого
- сохранить JSON-выгрузку перед удалением автоматизаций
Примеры запросов агенту
- Проведи аудит воркфлоу HubSpot и покажи, что можно удалить
- Выключи воркфлоу, которые отключены больше 90 дней, и подготовь их к удалению
- Сделай выгрузку всех воркфлоу через
/workflows-as-codeперед чисткой
Как установить cleanup-workflows
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a claude-code2Вручную: положить файлы
~/.claude/skills/cleanup-workflows/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/cleanup-workflows/
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a codex2Вручную: положить файлы
.agents/skills/cleanup-workflows/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a cursor2Вручную: положить файлы
.cursor/skills/cleanup-workflows/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install TomGranot/hubspot-admin-skills cleanup-workflows2Вручную: положить файлы
.github/skills/cleanup-workflows/SKILL.md1Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a gemini-cli2Командой платформы
gemini skills install https://github.com/TomGranot/hubspot-admin-skills --path skills/cleanup-workflowsВручную: положить файлы
.devin/skills/cleanup-workflows/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о cleanup-workflows
Как установить cleanup-workflows в Claude Code?
Выполните npx skills add TomGranot/hubspot-admin-skills --skill cleanup-workflows -a claude-code. Скилл встанет в ~/.claude/skills/cleanup-workflows/SKILL.md.
Что делает cleanup-workflows?
Проводит инвентаризацию воркфлоу HubSpot через v4 Automation API, помечает неактивные, тестовые и устаревшие, а после вашего подтверждения выключает и удаляет их.
Что нужно для работы скилла?
Сервисный ключ HubSpot с областью automation в HUBSPOT_ACCESS_TOKEN и Python 3.10+ с uv. На части тарифных планов Automation API вернёт 403, и аудит придётся делать в интерфейсе HubSpot.
Исходный текст
SKILL.md · MIT
---
name: cleanup-workflows
description: "Audit and remove inactive, test, or deprecated workflows from HubSpot. Identifies workflows that have never enrolled contacts, workflows turned off for 90+ days, and test workflows."
license: MIT
metadata:
author: tomgranot
version: "1.1"
category: ongoing-maintenance
---
# Cleanup Workflows
Audit HubSpot workflows to remove dead weight. Unused workflows clutter the automation dashboard and make it harder to understand what is actually running.
## Prerequisites
- A HubSpot service key (`HUBSPOT_ACCESS_TOKEN` in `.env`; an existing legacy private app token also works) with the `automation` scope
- Python 3.10+ with [`uv`](https://github.com/astral-sh/uv)
- Note: The Automation API may return 403 on some plan tiers. If so, audit manually in HubSpot UI under Automation > Workflows.
- Strongly recommended: run `/workflows-as-code` first to export a JSON backup of every workflow — deleted workflows cannot be restored, but an export lets you recreate them via the API.
## Step-by-Step Instructions
### Stage 1: Plan
Confirm with the user before starting:
1. Archive-first policy: turn off, wait a week, then delete (recommended)?
2. Any workflows that must never be touched (compliance, integrations)?
### Stage 2: Before
Inventory all workflows via the v4 Automation API:
```python
import os, requests
from dotenv import load_dotenv
load_dotenv()
TOKEN = os.environ["HUBSPOT_ACCESS_TOKEN"]
BASE = "https://api.hubapi.com"
HEADERS = {"Authorization": f"Bearer {TOKEN}", "Content-Type": "application/json"}
flows, after = [], None
while True:
params = {"limit": 100}
if after:
params["after"] = after
resp = requests.get(f"{BASE}/automation/v4/flows", headers=HEADERS, params=params)
resp.raise_for_status()
data = resp.json()
flows.extend(data.get("results", []))
after = data.get("paging", {}).get("next", {}).get("after")
if not after:
break
```
For each workflow, record: flow ID, name, enabled status, type, created date, last updated date. Enrollment counts are visible in the UI (Automation > Workflows > Details).
### Stage 3: Execute
Flag workflows matching any of these criteria:
1. **Turned off** for 90+ days with no plans to reactivate
2. **Zero enrollments** ever (likely test or abandoned drafts)
3. **Test workflows** (names containing "test", "temp", "copy of", "draft")
4. **Superseded workflows** replaced by newer versions
5. **Error state** workflows that have been failing consistently
Before deleting, check:
- Does the workflow feed into another workflow (via enrollment trigger or go-to-workflow action)?
- Does the workflow set properties that other workflows depend on?
- Is there any documentation referencing this workflow?
Present the candidate list to the user and wait for explicit confirmation. Then, for confirmed candidates: turn each workflow off first (in the UI, or `PUT /automation/v4/flows/{flowId}` with `isEnabled: false` — the PUT requires the current `revisionId`), wait one week, then delete via `DELETE /automation/v4/flows/{flowId}` or the UI.
### Stage 4: After
1. Re-run the inventory and confirm the deleted workflows are gone.
2. Document deleted workflows in a cleanup log (name, purpose, reason for deletion).
3. Notify workflow owners.
## Rollback
- Deleted workflows cannot be restored in HubSpot.
- A `/workflows-as-code` export taken beforehand contains each workflow's full JSON definition — recreate a deleted workflow with `POST /automation/v4/flows` from its export.
- HubSpot retains workflow activity history on contact records even after the workflow is deleted.
## Tips
- Use folders in the workflows dashboard to organize by team, purpose, or status.
- Prefix draft/test workflows with "[TEST]" so they are easy to identify later.
- Review workflows quarterly as part of the database cleanup routine.
© tomgranot · MIT · TomGranot/hubspot-admin-skills