К основному содержанию
скилл CX Codex

team-ownership — скилл для Claude Code: передача владения записями CRM

Разбирает, кому принадлежат контакты, сделки и тикеты в HubSpot, и переносит владение при уходе сотрудника.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add HubSpot/agent-cli-skills --skill team-ownership -a claude-code
Открыть на GitHub

Что делает team-ownership

Скилл работает с полем hubspot_owner_id на объектах contacts, companies, deals и tickets. Владельцы — это пользователи CRM, их список отдаёт hubspot owners list. Отдельного объекта команд нет, поэтому срез по команде строится на клиенте: записи группируются по hubspot_owner_id и сшиваются со списком владельцев ради читаемых адресов.

Перед началом нужно прочитать bulk-operations/SKILL.md: оттуда берутся конвейер JSONL, пагинация, схема dry-run/digest/confirm и восстановление через hubspot history. ID владельцев не хардкодят — они привязаны к конкретному порталу, поэтому сначала почту превращают в ID, а результат кэшируют.

Массовая передача идёт по цепочке «поиск → обновление»: строки поиска пересобираются в {id, properties:{hubspot_owner_id}} и уходят в objects update. Эта операция необратима, поэтому сначала прогоняют dry-run и смотрят дайджест, а затем повторяют с --digest и --confirm. Для одного сотрудника цикл проходит по всем четырём типам объектов. Ошиблись с переносом — hubspot history --since 1h покажет затронутые ID.

Какие задачи решает

  • перенести записи уходящего менеджера на коллегу
  • найти все сделки и тикеты конкретного владельца
  • посчитать, сколько записей закреплено за каждым сотрудником
  • выбрать сделки без владельца и назначить ответственного
  • назначить владельца одной записи без выгрузки в JSONL

Примеры запросов агенту

  • покажи все сделки, которые принадлежат [email protected]
  • передай контакты и тикеты уходящего сотрудника на [email protected], сначала dry-run
  • сгруппируй открытые сделки по владельцу и выведи почту с количеством

Как установить team-ownership

1Через Skills CLI (Vercel)

npx skills add HubSpot/agent-cli-skills --skill team-ownership -a claude-code

2Вручную: положить файлы

~/.claude/skills/team-ownership/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/team-ownership/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора11

crm-data-quality Скилл для работы с записями HubSpot: находит незаполненные поля, приводит значения к одному виду, сливает дубликаты и проверяет свойства. CX Codex +1 1 800установок bulk-operations Скилл задаёт базовые приёмы работы с CLI hubspot: пакетное чтение, пагинация, JSONL-конвейеры и безопасные массовые записи. CX Codex +1 1 800установок quote-to-cash Скилл для работы с HubSpot через CLI: создаёт товары, собирает сметы со строками и связями, читает счета и подписки. CX Codex +1 1 700установок customer-retention Находит клиентов без контакта и с риском оттока через фильтры CRM HubSpot, затем создаёт задачи на дозвон пачкой. CX Codex +1 1 700установок communication-history Скилл вытаскивает из HubSpot звонки, письма, заметки, встречи и задачи по контакту, сделке или компании и собирает справку перед звонком. CX Codex +1 1 700установок custom-object-management Скилл для работы со схемами кастомных объектов HubSpot CRM: посмотреть, создать, обновить метаданные или удалить тип объекта через CLI. CX Codex +1 1 700установок sales-reporting Скилл собирает сводки по сделкам HubSpot прямо в терминале: что закрывается на этой неделе, пайплайн по стадиям и владельцам, win/loss за период. CX Codex +1 1 700установок deal-management Ведёт сделки HubSpot из терминала: находит MQL, создаёт сделки со связями, двигает этапы пачкой и закрывает зависшие. CX Codex +1 1 700установок

Похожие

cargo-connection getcargo Управляет интеграциями и коннекторами в Cargo CLI, находит действия и разрешает параметры connectorUuid для нод воркфлоу. CX Codex +1 10 300установок canva-creator официальный anthropics Берёт готовый бриф контента и пошагово разворачивает кампанию: строит календарь публикаций, создаёт макеты в Canva для соцсетей, пишет тексты и отправляет посты в HubSpot. CX Codex +1 1 900установок inngest-flow-control inngest Скилл по flow control в Inngest: concurrency, throttling, rate limiting, debounce, priority, singleton и батчинг событий. Пригодится, когда внешние API отвечают 429. CX Codex +1 1 600установок business-pulse официальный anthropics Собирает краткий снимок бизнеса из подключённых финансовых, продажных и рабочих сервисов. Нужен для ежедневного брифа или проверки, что требует внимания сегодня. CX Codex +1 1 800установок recipe-share-folder-with-team официальный googleworkspace Пошаговый сценарий для раздачи доступа к папке на Google Диске через утилиту gws. Пригодится, когда нужно выдать права редактора или читателя коллегам из терминала. CX Codex +1 30 000установок recipe-send-team-announcement официальный googleworkspace Отправляет объявление команде сразу двумя каналами: письмом через Gmail и сообщением в пространство Google Chat. Пригодится, когда нужно продублировать апдейт там, где люди точно увидят. CX Codex +1 29 700установок

Рядом в теме «Автоматизация и no-code: n8n, Zapier, Make»

Все скиллы по теме «Автоматизация и no-code: n8n, Zapier, Make» →

Вопросы о team-ownership

Как установить team-ownership в Claude?

Выполните npx skills add HubSpot/agent-cli-skills --skill team-ownership -a claude-code, скилл появится в ~/.claude/skills/team-ownership/SKILL.md.

Что делает team-ownership?

Назначает и переназначает владельцев записей CRM, показывает, кому что принадлежит, и помогает раздать записи при смене сотрудника. Работает поверх скилла bulk-operations.

Чем team-ownership отличается от bulk-operations?

bulk-operations даёт общий механизм массовых правок: JSONL, пагинацию, dry-run/digest/confirm и восстановление. team-ownership добавляет к нему логику владения записями и сценарий передачи дел.

Исходный текст

SKILL.md · Apache-2.0
---
name: team-ownership
description: Assign and reassign CRM record ownership, audit who-owns-what across object types, and handle rep transitions. Built on `bulk-operations`.
triggers:
  - "assign owner"
  - "reassign records"
  - "ownership audit"
  - "rep leaving"
  - "transfer records"
  - "change owner"
  - "find records owned by"
  - "redistribute accounts"
---

Prereq: read `bulk-operations/SKILL.md` first. JSONL piping, pagination, dry-run/digest/confirm, and `hubspot history` recovery live there. Reshape patterns live in `bulk-operations/resources/json-patterns.md`.

`hubspot_owner_id` is a string field on `contacts`, `companies`, `deals`, and `tickets`. Owners are CRM users — `hubspot owners list` returns them; there is no `teams` object, so team-level views are client-side groupings by `hubspot_owner_id`.

## 1. Resolve email → owner ID

Never hardcode IDs — they are portal-specific. Resolve, then cache:

```bash
FROM_ID=$(hubspot owners list | jq -r 'select(.email=="[email protected]") | .id')
TO_ID=$(hubspot owners list | jq -r 'select(.email=="[email protected]")  | .id')
```

## 2. Find records for an owner

Same filter across all four object types. Add object-specific `--properties` for context. Unowned records use the `!property` form.

```bash
hubspot objects search --type contacts  --filter "hubspot_owner_id=$FROM_ID" --properties email,firstname,lifecyclestage
hubspot objects search --type companies --filter "hubspot_owner_id=$FROM_ID" --properties name,domain
hubspot objects search --type deals     --filter "hubspot_owner_id=$FROM_ID" --properties dealname,dealstage,amount
hubspot objects search --type tickets   --filter "hubspot_owner_id=$FROM_ID" --properties subject,hs_pipeline_stage

# Records with no owner at all
hubspot objects search --type deals --filter "!hubspot_owner_id" --properties dealname,amount
```

>100 hits — page with the `--after` loop from `bulk-operations`. Counting only: pipe to `wc -l`.

## 3. Bulk reassign — search → update

Reshape each search row into `{id, properties:{hubspot_owner_id}}` and pipe to `objects update`. `objects update` is irreversible, so dry-run first: the dry-run emits a digest + `apply_command_hint` at every size (confirm = the record ID for one record, the row count for a batch). Then re-run with `--digest`/`--confirm` (see `bulk-operations/SKILL.md` § "Safe destructive workflow").

```bash
# Dry-run
hubspot objects search --type contacts --filter "hubspot_owner_id=$FROM_ID" \
| jq -c --arg to "$TO_ID" '{id, properties:{hubspot_owner_id:$to}}' \
| hubspot objects update --type contacts --dry-run \
| tee /tmp/reassign.preview.jsonl

# Execute — lift the digest + confirm from the preview line (required at every size)
digest=$(jq -r 'select(.digest != null) | .digest' /tmp/reassign.preview.jsonl)
confirm=$(jq -r 'select(.digest != null) | .target.id' /tmp/reassign.preview.jsonl)   # single: record ID; batch: row count

hubspot objects search --type contacts --filter "hubspot_owner_id=$FROM_ID" \
| jq -c --arg to "$TO_ID" '{id, properties:{hubspot_owner_id:$to}}' \
| hubspot objects update --type contacts --digest "$digest" --confirm "$confirm"
```

Single-record assignment — no stdin, no jq. Still irreversible, so dry-run first (confirm = the record ID):

```bash
hubspot objects update --type contacts 12345 --property hubspot_owner_id=$TO_ID --dry-run
hubspot objects update --type contacts 12345 --property hubspot_owner_id=$TO_ID --digest <hash> --confirm 12345
```

## 4. Rep-leaves workflow

Loop over the four object types the rep touches:

```bash
FROM_ID=$(hubspot owners list | jq -r 'select(.email=="[email protected]")    | .id')
TO_ID=$(hubspot  owners list | jq -r 'select(.email=="[email protected]") | .id')

for type in contacts companies deals tickets; do
  echo "── $type ──"
  hubspot objects search --type "$type" --filter "hubspot_owner_id=$FROM_ID" \
  | jq -c --arg to "$TO_ID" '{id, properties:{hubspot_owner_id:$to}}' \
  | hubspot objects update --type "$type" --dry-run
done
```

Review each digest line, then re-run per type with the `--digest`/`--confirm` lifted from that type's preview line (required at every size; confirm = the row count for a batch, the record ID for a single). Mis-reassigned? `hubspot history --since 1h` lists the affected IDs.

## 5. Team-level views (client-side grouping)

Group records by `hubspot_owner_id`, join to `owners list` for human-readable emails:

```bash
hubspot objects search --type deals --filter "dealstage!=closedwon AND dealstage!=closedlost" \
  --properties hubspot_owner_id --format json \
| jq '.data | group_by(.properties.hubspot_owner_id)
       | map({owner_id: .[0].properties.hubspot_owner_id, count: length})' \
> /tmp/by-owner.json

hubspot owners list \
| jq --slurpfile by /tmp/by-owner.json -r \
     '. as $o | $by[0][] | select(.owner_id==$o.id) | "\($o.email)\t\(.count)"'
```

© HubSpot · Apache-2.0 · HubSpot/agent-cli-skills

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой