workflow-automation
Skill28 starsChanged 43 days agoApache-2.0View on GitHub
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.
- Reads credentials
17 other projects use a version of this.
Adopted by
Most recently taken up by
- amanuelmamo7/Skillstheir own version, first seen Nov 7, 2026
- KMaruthi2002/universal-llm-skillstheir own version, first seen Oct 25, 2026
- ruvnet/ruflotheir own version, first seen Oct 21, 2026
- xfstudio/skillstheir own version, first seen Oct 13, 2026
- ruvnet/claude-flowtheir own version, first seen Oct 8, 2026
- IngAs8/ClaudeSkilltheir own version, first seen Sep 28, 2026
Used with
Projects with it also use agent-code-review-swarm, agent-test-long-runner and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
ZekiogSkillagent-code-review-swarm
Agent skill for code-review-swarm - invoke with $agent-code-review-swarm
Also in 6 projects that use this
ZekiogSkillagent-test-long-runner
Agent skill for test-long-runner - invoke with $agent-test-long-runner
Also in 6 projects that use this
- +10 more from Zekiog
Other versions17 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 17
- ruvnet/claude-flow★ 80ksame name
- ruvnet/ruflo★ 79ksame name
- xfstudio/skills★ 9same name
- thejordanleopold/claude-code-skills-distilled★ 4same name
- Adhamxon/claude-code-skills★ 2same name
- ai4brands-design/claude-skills★ 2same name
- alemdarlabs/sage-unreal-mcp★ 2same name
- Zekiog/ruflo★ 2same name
- amanuelmamo7/Skills★ 1same name
- fidgetcoding/fidgetflo★ 1same name
7 more not listed
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 repository18 other files it gives its agents.
- audience-targetingSkill
- bulk-operationsSkill
- communication-historySkill
- conversation-history-briefSkill
- conversation-inbox-triageSkill
- crm-data-qualitySkill
- crm-lookupSkill
- customer-retentionSkill
- custom-object-managementSkill
- data-enrichmentSkill
- deal-managementSkill
- quote-to-cashSkill
- sales-executionSkill
- sales-reportingSkill
- team-ownershipSkill
- ticket-resolutionSkill
- visitor-identificationSkill
- workSkill
The file
We split this skill into the rules it gives an agent
3 rules. 0 are common, 0 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
0
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 28
If anything here ever drifts, hubspot workflows --help and hs --help are authoritative.
- Very specific: line 53
If a user token 403s with a missing-scope error, re-run hubspot auth login so the newly added automation scope is granted.
- Very specific: line 97
Update is a full replace. The body must include revisionId (from get) and type.
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
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 listIf 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 editingGet 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 worksSet 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 12345678Pitfall: 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.
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.

