SKILL·B16894

workflows-as-code

TomGranot
更新于 3 days ago
51
14
51
在 GitHub 上查看
apiautomation

关于

This skill exports HubSpot workflows as versioned JSON files via the API, enabling them to be treated as code. It allows developers to track changes with diffs and fully restore workflows from the JSON backups, providing a critical safety net. Use it to backup, review, and recover automation configurations that are otherwise unprotected in the HubSpot UI.

快速安装

Claude Code

推荐
主要方式
npx skills add TomGranot/hubspot-admin-skills -a claude-code
插件命令备选方式
/plugin add https://github.com/TomGranot/hubspot-admin-skills
Git 克隆备选方式
git clone https://github.com/TomGranot/hubspot-admin-skills.git ~/.claude/skills/workflows-as-code

在 Claude Code 中复制并粘贴此命令以安装该技能

技能文档

Workflows as Code

Export every workflow in the portal to JSON files, keep the exports under version control, and restore workflows from JSON when something breaks. HubSpot has no recycle bin for workflows — a deleted or mangled workflow is gone unless you have its definition. This skill gives you that safety net, plus reviewable diffs of what changed between exports.

Why This Matters

Workflows are production automation, but most portals treat them like disposable UI configuration: no backups, no change history, no review. One mis-click in the workflow editor can silently break lead routing or suppression for weeks. The v4 Automation API supports full read and create of workflow definitions, which makes a code-like lifecycle possible: export → version → diff → restore.

Prerequisites

  • A HubSpot private app access token (HUBSPOT_ACCESS_TOKEN in .env) with the automation scope (plus sensitive-data scopes if any flows touch sensitive properties)
  • Python 3.10+ with uv
  • A place to keep exports — a git repository is ideal (data/workflow-exports/ is gitignored here by default because exports may reference internal names; move them to a private repo if you want history)

Scripts

StageScriptRun with
Exportscripts/export.pyuv run skills/workflows-as-code/scripts/export.py
Restorescripts/restore.pyuv run skills/workflows-as-code/scripts/restore.py <export-file.json>

export.py lists all flows via GET /automation/v4/flows, fetches each full definition via the batch read endpoint (POST /automation/v4/flows/batch/read, falling back to per-flow GETs), and writes one JSON file per workflow plus a manifest. restore.py recreates a workflow from an export file via POST /automation/v4/flowsalways disabled, under a "(restored)" name, for review before enabling.

Execution Pattern

Stage 1: Plan

  1. Decide export cadence: before any workflow cleanup (mandatory — see /cleanup-workflows), after building new workflows, and on a schedule (monthly pairs well with /quarterly-database-cleanup).
  2. Decide where exports live long-term (private git repo recommended).

Stage 2: Before

Nothing to prepare — the export is read-only. Note the current workflow count from Automation > Workflows for comparison.

Stage 3: Execute — Export

uv run skills/workflows-as-code/scripts/export.py

Output layout:

data/workflow-exports/<YYYY-MM-DD>/
├── manifest.csv              # flowId, name, type, isEnabled, revisionId, file
├── flow-<flowId>.json        # one full definition per workflow
└── ...

To diff two exports:

diff -u data/workflow-exports/2026-06-01/flow-12345.json \
        data/workflow-exports/2026-07-01/flow-12345.json

(Timestamps and revision IDs will differ; meaningful changes show up in actions and enrollmentCriteria.)

Stage 3 (alternative): Execute — Restore

To recreate a deleted or broken workflow from an export:

uv run skills/workflows-as-code/scripts/restore.py data/workflow-exports/2026-06-01/flow-12345.json

The script strips server-assigned fields (id, revisionId, timestamps), renames the flow with a "(restored)" suffix to avoid name collisions, and creates it disabled. Review it in the UI, verify enrollment criteria and actions against the original, then rename and enable.

Stage 4: After

  1. Export: verify the manifest row count matches the portal's workflow count and spot-open one JSON file.
  2. Restore: open the restored workflow in Automation > Workflows, compare against the export, then enable.

Rollback

  • Export is read-only — nothing to roll back.
  • A restored workflow you do not want: it was created disabled; just delete it.

Technical Gotchas

  1. Updating in place requires the current revisionId. PUT /automation/v4/{flowId} must include the flow's latest revisionId and type — a stale revision is rejected. The restore script sidesteps this by creating a new flow instead of updating.
  2. Some actions round-trip imperfectly. Actions whose field shapes are undocumented (e.g., copy-from-associated-object, notification recipients) export fine but may be rejected on re-create in a different portal. The restore script reports per-action errors; add rejected actions in the UI.
  3. v3 workflow IDs are not v4 flow IDs. If you have old tooling built on /automation/v3/workflows, the v4 API provides workflowId → flowId mapping endpoints for migration. New tooling should use v4 exclusively — v3 is legacy.
  4. Sensitive-data scopes. Flows that read or set sensitive properties require the corresponding sensitive-data scopes on your private app, or reads will fail.
  5. Exports may contain internal data. Workflow names, property names, list IDs, and notification text are all in the JSON. Treat exports like configuration secrets — keep them in a private repo.

GitHub 仓库

TomGranot/hubspot-admin-skills
路径: skills/workflows-as-code
0
hubspothubspot-apihubspot-crmhubspot-integration
FAQ

Frequently asked questions

What is the workflows-as-code skill?

workflows-as-code is a Claude Skill by TomGranot. Skills package instructions and resources that Claude loads on demand, so Claude can perform workflows-as-code-related tasks without extra prompting.

How do I install workflows-as-code?

Use the install commands on this page: add workflows-as-code to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.

What category does workflows-as-code belong to?

workflows-as-code is in the Meta category, tagged api and automation.

Is workflows-as-code free to use?

Yes. workflows-as-code is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.

相关推荐技能

content-collections

Content Collections 是一个 TypeScript 优先的构建工具,可将本地 Markdown/MDX 文件转换为类型安全的数据集合。它专为构建博客、文档站和内容密集型 Vite+React 应用而设计,提供基于 Zod 的自动模式验证。该工具涵盖从 Vite 插件配置、MDX 编译到生产环境部署的完整工作流。

查看技能
polymarket

这个Claude Skill为开发者提供完整的Polymarket预测市场开发支持,涵盖API调用、交易执行和市场数据分析。关键特性包括实时WebSocket数据流,可监控实时交易、订单和市场动态。开发者可用它构建预测市场应用、实施交易策略并集成实时市场预测功能。

查看技能
creating-opencode-plugins

该Skill帮助开发者创建OpenCode插件,用于接入命令、文件、LSP等25+种事件。它提供了插件结构、事件API规范和JavaScript/TypeScript实现模式,适合需要拦截操作、扩展功能或自定义事件处理的场景。开发者可通过它快速构建响应式模块来增强OpenCode AI助手的能力。

查看技能
sglang

SGLang是一个专为LLM设计的高性能推理框架,特别适用于需要结构化输出的场景。它通过RadixAttention前缀缓存技术,在处理JSON、正则表达式、工具调用等具有重复前缀的复杂工作流时,能实现极速生成。如果你正在构建智能体或多轮对话系统,并追求远超vLLM的推理性能,SGLang是理想选择。

查看技能