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

sales-execution — скилл для Claude Code: что делает и как установить

Фиксирует звонки, заметки, встречи и задачи в HubSpot через CLI. Связывает их со сделками и контактами, чтобы события сразу появлялись в CRM.

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

Что делает sales-execution

Скилл учит агента логировать действия продавцов в HubSpot через официальный интерфейс командной строки. Инструмент оформляет звонки, встречи, заметки и задачи, передавая время в миллисекундах Unix. Для задач параметр hs_timestamp задаёт срок выполнения, а не момент создания записи.

В интерфейсе HubSpot несохранённые связи не видны. Любой вызов hubspot objects create создаёт изолированную сущность, поэтому следом обязательно идёт команда hubspot associations create к контакту или сделке. Массовые действия скилл выстраивает через конвейеры: читает список сделок фильтром @!=, генерирует JSONL и пачками связывает созданные задачи через стандартный поток ввода.

Подключать контакты к цепочкам Sales Hub через CLI не получится. Команды для последовательностей доступны в интерфейсе только на чтение, поэтому коммуникацию приходится вести через отдельные задачи.

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

  • Зафиксировать итоги звонка или встречи с привязкой к сделке в HubSpot
  • Создать напоминания и задачи с точным дедлайном для выбранного контакта
  • Назначить задачи по всем сделкам на определённом этапе воронки
  • Найти открытые задачи по контакту без лишних запросов к API

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

  • Залогируй звонок по сделке 456 с контактом 149, бюджет 50 тысяч согласован
  • Создай задачу перезвонить по сделке 456 через 7 дней
  • Добавь заметку к сделке 456 о том, что коммерческое предложение отправлено

Как установить sales-execution

1Через Skills CLI (Vercel)

npx skills add HubSpot/agent-cli-skills --skill sales-execution -a claude-code

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

~/.claude/skills/sales-execution/SKILL.md

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

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

Вопросы о sales-execution

Как установить sales-execution в Claude Code?

Выполните команду npx skills add HubSpot/agent-cli-skills --skill sales-execution -a claude-code. Файл навыка сохранится по пути ~/.claude/skills/sales-execution/SKILL.md.

Зачем нужен скилл sales-execution?

Он обучает ИИ-ассистента вносить активности в HubSpot CRM через CLI и связывать их с контактами и сделками по правилам API.

Почему созданная активность не видна в карточке сделки?

В HubSpot команда objects create создаёт объект без привязки. Чтобы событие появилось в таймлайне CRM, необходимо сразу выполнить hubspot associations create между активностью и сделкой.

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

SKILL.md · Apache-2.0
---
name: sales-execution
description: Log sales activities — calls, notes, meetings, tasks — against contacts and deals, with the mandatory create-then-associate step that makes them visible in the CRM.
triggers:
  - "log a call"
  - "log a note"
  - "log a meeting"
  - "create task"
  - "follow-up task"
  - "log activity"
  - "log engagement"
---

## Resources

| File | When to use |
|---|---|
| `resources/activity-properties-reference.md` | Property names and enum values for calls/notes/meetings/tasks. Keep open while writing `objects create` — for live enum values run `hubspot properties options-list --type calls <property>`, and for call outcomes `hubspot activities calls dispositions list`; the reference is the shortcut. |

Read `bulk-operations/SKILL.md` first — this skill assumes its batching, pipe, and dry-run patterns.

## The two non-obvious rules

**1. Activities are invisible until associated.** `hubspot objects create --type calls ...` alone produces a record nobody can see in the CRM UI. Always follow with `hubspot associations create --from calls:<id> --to contacts:<id>` (and the deal, if relevant) before stopping.

**2. Timestamps differ between write and read.**

| Path | Field | Format |
|---|---|---|
| `objects create --property hs_timestamp=...` | `hs_timestamp` | **Unix ms** (13 digits) |
| `objects get --type calls <id>` returns | `properties.hs_timestamp` | Unix ms (string) |
| `activities list --contact <id>` returns | `timestamp` (flat, top-level) | **ISO 8601** (e.g. `2024-01-15T10:00:00Z`) |

Current Unix ms: `$(date +%s)000` (macOS) or `$(date +%s%3N)` (Linux). `activities list` rows are `{"id","type","timestamp","lastModified","title","body","status","owner_id"}` — the cross-type timeline read shape, no raw property names.

## Create + associate, by type

```bash
# CALL
call_id=$(hubspot objects create --type calls \
  --property hs_call_title="Discovery call" \
  --property hs_call_body="Confirmed $50K budget, Q2 timeline." \
  --property hs_call_direction=OUTBOUND \
  --property hs_call_status=COMPLETED \
  --property hs_call_duration=1800000 \
  --property hs_timestamp=$(date +%s)000 \
  --format json | jq -r '.id')
hubspot associations create --from calls:$call_id --to contacts:149
hubspot associations create --from calls:$call_id --to deals:456

# NOTE
note_id=$(hubspot objects create --type notes \
  --property hs_note_body="Sent proposal. Follow-up Friday." \
  --property hs_timestamp=$(date +%s)000 \
  --format json | jq -r '.id')
hubspot associations create --from notes:$note_id --to deals:456

# MEETING — start/end in Unix ms; reuse start as hs_timestamp
start=$(date +%s)000; end=$(( ${start%000} + 3600 ))000
meeting_id=$(hubspot objects create --type meetings \
  --property hs_meeting_title="Demo — Acme" --property hs_meeting_outcome=COMPLETED \
  --property hs_meeting_start_time=$start --property hs_meeting_end_time=$end \
  --property hs_timestamp=$start --format json | jq -r '.id')
hubspot associations create --from meetings:$meeting_id --to contacts:149

# TASK — hs_timestamp is the DUE DATE, not creation time
due=$(( $(date -v+7d +%s) * 1000 ))   # macOS; Linux: date -d '7 days' +%s
task_id=$(hubspot objects create --type tasks \
  --property hs_task_subject="Confirm proposal received" \
  --property hs_task_priority=HIGH \
  --property hs_task_status=NOT_STARTED \
  --property hs_task_type=CALL \
  --property hs_timestamp=$due \
  --format json | jq -r '.id')
hubspot associations create --from tasks:$task_id --to deals:456
```

## Open tasks for a contact — two CLI calls, no xargs

`associations list` emits `{"id": …}` per row (plus label/associationType fields); `objects get` reads from stdin in one batch call (see `bulk-operations/SKILL.md` "Read in batch").

```bash
hubspot associations list --from contacts:149 --to tasks \
| hubspot objects get --type tasks \
    --properties hs_task_subject,hs_task_status,hs_task_priority,hs_timestamp \
| jq -c 'select(.properties.hs_task_status != "COMPLETED")'
```

## Open tasks portal-wide — exclude statuses server-side with `@!=`

`@!=` is NOT_IN: one condition for the whole excluded list. Do **not** spend one `--filter` flag per excluded status — the search API caps a request at 5 filter groups, 6 conditions per group, and 18 conditions total.

`@!=` matches only records that *have* the property, so replicating a real HubSpot task view's "status is none of … or is empty" needs two groups (OR'd), with the shared conditions repeated in each:

```bash
hubspot objects search --type tasks \
  --filter "hubspot_owner_id=123 AND hs_task_status@!=COMPLETED,DEFERRED" \
  --filter "hubspot_owner_id=123 AND !hs_task_status" \
  --properties hs_task_subject,hs_task_status,hs_task_priority,hs_timestamp
```

Inverse (only these statuses) is `@=` (IN): `--filter "hs_task_status@=NOT_STARTED,IN_PROGRESS,WAITING"`.

## Bulk: follow-up task per deal in a stage

The deal ID and the task ID must travel together. Persist the deal payload to a file, create tasks (output order matches input order — see bulk-operations), then zip the two ID lists line-by-line and stream association pairs in one call.

```bash
due=$(( $(date -v+7d +%s) * 1000 ))

# 1. Per-deal payload, deal_id retained alongside the create payload.
hubspot objects search --type deals --filter "dealstage=appointmentscheduled" \
  --properties dealname \
| jq -c --argjson due "$due" '{deal_id: .id, payload: {properties: {
    hs_task_subject: ("Follow up: " + .properties.dealname),
    hs_task_priority: "HIGH", hs_task_status: "NOT_STARTED", hs_task_type: "CALL",
    hs_timestamp: ($due|tostring)
  }}}' > /tmp/deal_tasks.jsonl

# 2. Create tasks; one CLI call for the whole batch.
jq -c '.payload' /tmp/deal_tasks.jsonl \
| hubspot objects create --type tasks > /tmp/created_tasks.jsonl

# 3. Zip and stream association pairs through stdin.
paste \
  <(jq -r '.deal_id' /tmp/deal_tasks.jsonl) \
  <(jq -r '.id'      /tmp/created_tasks.jsonl) \
| jq -Rc 'split("\t") | {from:("tasks:"+.[1]), to:("deals:"+.[0])}' \
| hubspot associations create
```

These are `objects create` calls (Additive) — creates are never digest-gated, so `--dry-run` is a plain preview and you execute by dropping it (no digest/confirm). The digest flow only applies to the irreversible writes (`update`/`upsert`/`delete`/`merge`) in `bulk-operations/SKILL.md`.

## Known constraints

Activities must be associated immediately or they're invisible in the CRM UI. For enum option values on activity properties, run `hubspot properties options-list --type calls <property>` (and for call outcomes, `hubspot activities calls dispositions list`); the reference is the shortcut. Sales Hub sequences are read-only in the CLI (`hubspot sequences list` / `get` / `enrollments`, `automation.sequences.read` scope) — the CLI cannot enroll a contact in a sequence, so drive outreach via tasks/activities above. This surface grows; recheck `hubspot --help` / `CHANGELOG.md` before assuming an API is missing.

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

Похожие скиллы

Все скиллы по теме «Заметки, задачи и проекты» →
find-skills vercel-labs Ищет и устанавливает готовые скиллы для ИИ-агентов через каталог skills.sh. Пригодится, когда для рабочей задачи нужен специализированный воркфлоу. CX Codex +1 4 000 000установок grill-me Matt Pocock Скилл проводит жёсткое интервью по плану или дизайну, чтобы найти пробелы и уточнить решения. Подойдёт перед началом разработки. 1 424 476установок grill-with-docs Matt Pocock Скилл проводит жёсткое интервью по плану или дизайну и по ходу создаёт ADR и глоссарий. Подойдёт перед началом сложной разработки. 1 219 756установок handoff Matt Pocock Собирает текущий диалог в документ передачи, чтобы другой агент продолжил работу с нужным контекстом. Нужен при смене сессии или исполнителя. 1 038 491установок grilling Matt Pocock Стресс-тестирует план, решение или идею сериями уточняющих вопросов. Подходит, когда нужно вскрыть допущения до начала работы. 979 543установок teach Matt Pocock Ведёт обучение по выбранной теме прямо в текущем каталоге и сохраняет прогресс между сессиями. Подойдёт, если хотите собрать личный курс вокруг рабочей цели. 862 247установок

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

quote-to-cash Скилл для работы с HubSpot через CLI: создаёт товары, собирает сметы со строками и связями, читает счета и подписки. CX Codex +1 1 700установок audience-targeting Фильтрует контакты в HubSpot по стадии сделки, активности или должности и выгружает сегмент в JSONL. Пригодится при сборке баз для рассылок и кампаний. CX Codex +1 1 700установок customer-retention Находит клиентов без контакта и с риском оттока через фильтры CRM HubSpot, затем создаёт задачи на дозвон пачкой. CX Codex +1 1 700установок team-ownership Разбирает, кому принадлежат контакты, сделки и тикеты в 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установок data-enrichment Скилл сопоставляет CSV или JSONL с контактами и компаниями в HubSpot и обновляет базу через upsert без лишних поисковых запросов. CX Codex +1 1 700установок sales-reporting Скилл собирает сводки по сделкам HubSpot прямо в терминале: что закрывается на этой неделе, пайплайн по стадиям и владельцам, win/loss за период. CX Codex +1 1 700установок

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

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