Feast CLI
从终端驱动 Feastalytics 平台。feast CLI 暴露了与平台内 AI 智能体相同的工具面(营销活动、自动化、优惠、漏斗、会员计划),作为已登录用户以普通命令形式调用生产 API。
CLI 是哪些工具存在以及它们接受什么的唯一事实来源——请始终在运行时发现它们,而不是假设,因为工具集会随着新端点被标记而增长。你的任务是选择合适的工具,将其作用于正确的组织,并传递有效的输入。
前提条件
必须安装 feast CLI 并将其加入 PATH:
npm install -g @feastalytics/cli # 或临时运行:npx @feastalytics/cli <command>
一次性认证——令牌缓存在 ~/.config/feast-cli/credentials.json 中并自动刷新:
feast login # 打开浏览器进行默认授权
feast login --password [username] # 无头/CI:用户名+密码提示,无需浏览器
如果某命令报告你未登录或会话已过期,请重新运行 feast login。
保持更新
CLI 和本技能都不会自动更新。当命令在 stderr 上打印更新通知时:
Update available: feast 0.1.1 → 0.2.0
同时更新两者,然后一行告知用户你已完成:
npm install -g @feastalytics/cli@latest # 仅当 `feast` 已通过全局安装位于 PATH 中时执行
npx skills add feastalytics/cli -g -a '*' -y # 从仓库刷新本技能
如果你一直通过 npx 而非全局安装来调用 CLI,请跳过 npm install -g,在会话剩余部分改用 npx @feastalytics/cli@latest <command>——否则 npx 会重复使用缓存的副本。
每当你更新 CLI 时,同时更新本技能:两者从同一个仓库通过不同触发器发布,因此新 CLI 版本通常也意味着本技能的指导已更改。如果全局安装因权限失败,不要用 sudo 重试——告知用户并回退到 npx @feastalytics/cli@latest。
核心循环:发现 → 描述 → 调用
不要猜测工具名称或输入结构。检查正在运行的 CLI:
feast tools # 列出每个可用工具、其所属领域以及是否进行修改
feast describe <tool> # 一个工具的完整描述 + 输入 JSON 模式
feast call <tool> --org <organizationId> --input '<json>'
在调用不熟悉的工具前始终先执行 describe——模式会告诉你确切必填字段,并且 CLI 会在发送任何内容之前根据该模式在本地验证你的 --input,因此错误负载会快速失败并给出清晰消息,而不是令人困惑的服务器错误。
组织:绝不让 API 猜测
大多数工具作用于一个组织。用户通常属于多个组织,因此明确目标组织至关重要。
feast whoami # 显示已登录用户以及他们可以操作的每个组织(含名称)
使用 --org <organizationId> 传递目标组织:
- 如果用户命名了一个组织,使用
feast whoami将其解析为 ID 并传递该 ID。 - 如果用户仅属于一个组织,CLI 会自动使用它——无需标志。
- 如果他们属于多个组织而你省略了
--org,CLI 会拒绝并列出所有组织,而不是默默选择一个。这是有意为之:对错误组织进行操作比停下来询问更糟糕。发生这种情况时,向用户展示列表并确认他们指哪个。
读取与写入
查询工具(列出、描述、读取)是安全且只读的。变异工具(创建、更新、克隆、删除、应用)会更改生产数据。
- 变异操作要求显式指定
--org。 - 在运行之前,CLI 在服务端解析组织并打印其名称,因此错误的
--org会显示为错误的餐厅名称而非不透明的 ID。请读取该行。 - **没有确认提示。**变异操作会在调用时立即执行。不会二次询问,也无法撤销。
最后一点对于那些影响现实世界而不仅仅是数据库的工具尤其重要。购买电话号码会从账户扣费。批准创作者访问或决定提交会立即向该人发送短信且无法撤回。发布营销活动会使其上线,定价循环促销会创建真实的 Stripe 产品。保存自动化编辑会更改客人接收的内容。请将这些视为不可逆,并在调用之前明确用户的意图,因为调用之后就没有任何关卡了。
优先读取再写入:例如,先使用 listCampaigns 找到正确的 campaignId 再执行 updateCampaign,或在创建流程之前先执行 describe/listAutomationFlows。
构建良好输入
--input 接受 JSON 字符串(对于较大负载可使用 --input-file <path>)。根据通过 describe 获得的模式构建它。当工具通过 ID 引用另一个实体(活动 ID、位置 ID、流程 ID)时,请先使用相关的列表/读取工具查找该 ID,而不是自行编造。
对于字段的领域特定含义——自动化如何链式连接、漏斗屏幕包含什么、优惠如何结构化——当模式本身不足时,请查阅 references/domains.md 中的指导。
工作流
许多任务需要多步骤执行,并且具有应用通常强制要求的顺序。最重要的规则:自动化存在于流程内部——始终先找到流程(listAutomationFlows)或创建一个(createAutomationFlow),然后再添加自动化;切勿创建孤立的自动化。 同样的“先解析父级/ID,再行动”模式也贯穿于营销活动、漏斗和优惠中。
**在对任何多步骤任务采取行动之前,请阅读其对应的工作流文件。**每个文件都包含必需的调用顺序和领域规则,这些规则使结果不仅有效而且良好——两者都不在工具模式中。请先阅读它;不要从工具描述中重构顺序。
| 执行此操作 | 阅读 |
|---|---|
| 创建、克隆或配置营销活动;策略积压中的优惠 | references/workflows/campaigns.md |
| 任何涉及自动化的操作——创建、编辑、模拟、推广草稿 | references/workflows/automations.md |
| 编辑漏斗屏幕、应用漏斗模板、暂存新屏幕 | references/workflows/funnels.md |
| 编写 Meta 广告文案——面向客人或创作者招募 | references/workflows/facebook.md |
| 创作者寻源——批准申请者、审核其内容、对话 | references/workflows/creators.md |
| 会员计划奖励;读取或保存钱包通行证配置 | references/workflows/members-program.md |
| 处理入职任务板;品牌身份 | references/workflows/onboarding.md |
| 搜索客人/会员及其活动 | references/workflows/guests.md |
当任务跨越多个文件时,请阅读多个文件——新营销活动通常意味着 campaigns.md 加上 automations.md 和 funnels.md。
某些操作是故意不暴露的:通过短信回复客人或创作者、向活跃会员触发自动化、奖励更新/删除、通行证图片生成,以及大多数创作者管道中除了两个批准决策之外的部分。工作流文件会说明哪些。不要为 feast tools 未列出的工作流捏造调用——告知用户该部分尚不可用。
链接你触及的内容
通过 CLI 完成的工作会出现在产品的某个位置,而链接是低成本但高价值的提供物——因此请随意提供。在创建、修改或发布了某些内容之后的操作轮次收尾时,请以一个简短的 Markdown 列表结束:在何处查看它、在何处编辑它、在何处预览它。不是要任何人必须去检查你的工作,而是因为打开该事物通常是下一步骤。当有人询问某个事物在何处或如何设置时,直接提供链接而非逐项点击的说明。
你不知道这些 URL——在编写任何 URL 之前请阅读 references/links.md。 仪表盘的结构与你从本技能其他地方的面向客人的链接中推断出的不同,因此一个看起来明显正确的 URL恰恰是需要检查的情况。错误的链接比没有链接更糟糕:它看起来权威但却返回 404。
该文件包含带有面板和选项卡名称的仪表盘路由、组织自己子域名下的面向客人的页面、完成漏斗草稿循环的预览路由,以及哪些查询参数实际上会抑制分析而不是仅仅将访问标记为预览。
工作示例
用户:“在我的 Plum Vietnamese 组织中的 Plum 位置添加一个满 5 减 5 的优惠。”
feast whoami # 查找 Plum Vietnamese 的组织 ID
feast describe dfyCreateOffer # 了解优惠输入结构
feast call dfyGetMenuHierarchy --org <orgId> --input '{"locationId":"<id>"}' # 查找位置/菜单 ID
feast call dfyCreateOffer --org <orgId> --input '{ ... }' # 创建优惠(先确认)
模式可以推广:识别组织、了解工具、解析任何引用的 ID,然后执行操作。
当某些操作失败时
- “未登录/会话已过期” →
feast login(在无头/CI 上下文中使用feast login --password [username])。 - “你属于多个组织” → 使用
feast whoami获取 ID 并通过--org选择一个。 - “输入与工具模式不匹配” → 重新阅读
feast describe <tool>并修正命名字段。 - 你期望的工具未被
feast tools列出 → 可能尚不可用;不要捏造调用,告知用户。