
workflow-automation
List, inspect, create, update, and delete HubSpot workflows (v4 flows API) from the hubspot agent CLI, not the hs developer CLI. Classic v3 contact-based workflows are not covered.
- Installs
- 1.8K
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/hubspot/agent-cli-skills --skill workflow-automation- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads workflow-automation automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Which CLI
Two different HubSpot CLIs share a confusing resemblance — don't mix them up:
hubspot— the HubSpot agent CLI that this skill library targets. It manages CRM data and automation, and it does have native workflow commands:hubspot workflows list|get|create|update|delete.hs— the HubSpot developer CLI (@hubspot/cli), for building dev projects: themes, modules, serverless functions, UI extensions, and private apps (hs project,hs upload,hs create). It does not create or manage workflow records.
To create or manage a workflow, use hubspot workflows ... — not hs.
If anything here ever drifts, hubspot workflows --help and hs --help are authoritative.
Resources
| File | When to use |
|---|---|
resources/workflow-json-reference.md | Body shape for create/update — the action graph, branching/convergence, enrollment, full-PUT pitfall |
resources/example-contact-flow.json | Minimal valid CONTACT_FLOW skeleton for hubspot workflows create --file |
resources/example-branching-flow.json | Illustrates branch convergence — two paths pointing connection.nextActionId at one shared downstream action |
Source of truth
hubspot workflows --help lists five subcommands: list, get, create, update, delete. There is no search — finding by name is list | jq. For JSONL piping, pagination, and destructive dry-run/digest/confirm patterns, this skill builds on bulk-operations/SKILL.md — re-read that first.
Auth — OAuth login or service key
Every hubspot workflows command works with both hubspot auth login (user OAuth) and HUBSPOT_ACCESS_TOKEN (a service key). The v4 flows API accepts user tokens; the automation scope it needs is now part of the CLI app's requestable scopes, so a plain hubspot auth login is enough:
hubspot auth login # user OAuth — grant the "automation" scope when prompted
# or
export HUBSPOT_ACCESS_TOKEN=<service-key> # create at Settings → Integrations → Service keys
hubspot workflows list
If a user token 403s with a missing-scope error, re-run hubspot auth login so the newly added automation scope is granted.
1. List + find by name
hubspot workflows list # JSONL: id, name, isEnabled, type, objectTypeId, revisionId
hubspot workflows list --format table # for human scanning
# Find by name — case-insensitive substring
hubspot workflows list | jq -c 'select(.name | test("Welcome"; "i"))'
# Exact match
hubspot workflows list | jq -c 'select(.name == "MQL Nurture")'
List reads /automation/v4/flows only. Classic contact-based workflows from /automation/v3/workflows are not returned, so an empty result does not necessarily indicate a missing automation scope. V4 results are paginated at 100 per call; loop with --after until meta.next is empty — see bulk-operations/SKILL.md "Pagination". See resources/json-patterns.md in bulk-operations for more jq filters.
2. Get + read shape
hubspot workflows get 12345678 # one
hubspot workflows get 12345678 87654321 # batch positional
printf '%s\n' 12345678 87654321 | hubspot workflows get # batch stdin
hubspot workflows get 12345678 > workflow.json # save for editing
Get returns the full body (actions, enrollmentCriteria, revisionId, …) — the shape required by create/update. See resources/workflow-json-reference.md.
3. Create from JSON
hubspot workflows create --file workflow.json --dry-run
hubspot workflows create --file workflow.json
cat workflow.json | hubspot workflows create # stdin also works
Set type (CONTACT_FLOW or PLATFORM_FLOW), flowType (WORKFLOW), and objectTypeId (e.g. 0-1 for contacts) — all required on create. See resources/workflow-json-reference.md for the body shape and resources/example-contact-flow.json for the minimal template. Easiest path: get an existing similar workflow as a starting template rather than hand-writing the JSON.
Pitfall: create --dry-run does not validate the body. It prints the standard dry-run preview (mutation_kind, target, impact) and makes no API call — a green dry-run proves only that the input is well-formed JSON, not that it's a valid create (a body missing type/flowType/objectTypeId/actions still returns ok:true, and the preview does not echo the body back). The only real validation is the live create. By contrast, update --dry-run does reject a body missing required fields like revisionId.
Branching and convergence. A LIST_BRANCH action forks the path on filter criteria; each branch — and the defaultBranch — carries a connection to the action it continues to. Because connections target actions by nextActionId, branches can converge: point two branches at the same actionId and both paths continue to one shared action, no duplication. See the branching section of resources/workflow-json-reference.md and resources/example-branching-flow.json.
4. Update — full PUT, get-modify-put round-trip
Update is a full replace. The body must include revisionId (from get) and type. Read-only fields (createdAt, updatedAt, dataSources) are stripped automatically. Update is gated: dry-run first, then re-run with --digest <hash> --confirm <flowId>.
# 1. Fetch current state
hubspot workflows get 12345678 > workflow.json
# 2. Edit workflow.json (preserve revisionId, type, and any field you want to keep)
# 3. Dry-run — emits a digest
hubspot workflows update 12345678 --file workflow.json --dry-run
# 4. Apply — confirm value is the flow id
hubspot workflows update 12345678 --file workflow.json \
--digest blast-xxxxxxxx --confirm 12345678
Pitfall: partial bodies silently clear fields. Sending only actions will wipe enrollmentCriteria. Always start from the full get response.
5. Delete — destructive, link to bulk safety flow
# 1. Dry-run — emits a digest + the confirm hint
hubspot workflows delete 12345678 --dry-run
# 2. Re-run with digest + confirm. Confirm value is the workflow's NAME, not its id.
hubspot workflows delete 12345678 --digest blast-xxxxxxxx --confirm "New lead routing"
The dry-run output includes an apply_command_hint — copy the exact confirm string from there to avoid quoting surprises. Workflows cannot be restored through the automation API after deletion; check hubspot history --since 1h for an audit record. The full safety pattern (digest, 5-minute expiry, history recovery) is documented in bulk-operations/SKILL.md "Safe destructive workflow".
Known limitations
listcovers only v4 flows. Classic contact-based workflows from/automation/v3/workflowsare not returned.- No
hubspot workflows search—list | jqis the workaround. hubspot segmentsprovides CRM lists (list,get,create,update,update-filters,delete,restore,members-list/members-add/members-remove). List-membership enrollment triggers are part of the workflow body (enrollmentCriteria), so configure them throughhubspot workflows create/update— get the list ID withhubspot segments list/getand copy theenrollmentCriteriashape from a realworkflows get(seeresources/workflow-json-reference.md). No UI step required.- Sales Hub sequences are a separate surface from workflows:
hubspot sequencesreads them (list --user-id <id>,get <id> --user-id <id>,enrollments <contact_id>) but is read-only — no create/update/delete/enroll, and it is not a CRM object type (Sales Hub Professional+,automation.sequences.readscope). Workflow create/update/delete stays underhubspot workflows. This surface grows; recheckhubspot --help/CHANGELOG.mdbefore assuming an API is missing. dataSourcesis read-only — cannot be rewired via update.
FAQ
What does the workflow-automation skill do?
List, inspect, create, update, and delete HubSpot workflows (v4 flows API) from the hubspot agent CLI, not the hs developer CLI. Classic v3 contact-based workflows are not covered.
How do I install workflow-automation?
Run npx skills add https://github.com/hubspot/agent-cli-skills --skill workflow-automation in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/workflow-automation/ (personal) or .claude/skills/workflow-automation/ (project).
Which AI agents can use workflow-automation?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is workflow-automation safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains workflow-automation?
It is published by hubspot in hubspot/agent-cli-skills. It has 1,761 recorded installs.
More from hubspot/agent-cli-skills
ticket-resolution
hubspot/agent-cli-skills
Create, triage, advance, and close HubSpot support tickets — pipeline discovery, contact/company association, priority queues, bulk stage moves, resolution close-out.
crm-lookup
hubspot/agent-cli-skills
Find a specific CRM record by ID, email, domain, or name fragment, and traverse associations for the full account picture.
bulk-operations
hubspot/agent-cli-skills
Foundation patterns for the hubspot CLI — JSONL piping, batch read, pagination, dry-run/digest/confirm for destructive ops, and hubspot history for recovery. Every other skill builds on this one.
crm-data-quality
hubspot/agent-cli-skills
Find incomplete records, normalize field values in bulk, dedupe with hubspot objects merge, and audit custom properties. Builds on bulk-operations for JSONL piping and dry-run/digest/confirm.
deal-management
hubspot/agent-cli-skills
Run the full deal lifecycle from CLI — discover pipelines/stages, qualify MQLs into deals with associations, advance/reassign in bulk, hunt stalled deals, and close.
sales-reporting
hubspot/agent-cli-skills
Daily briefings, pipeline snapshots, and win/loss analysis from the terminal — closing-this-week, open pipeline by stage/owner, and closed-won vs closed-lost over a period.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。