Community生产力与协作github.com

caveman-discover

自动发现代码仓库中所有LLM工作流,并为 Caveman Cloud 按工作流归类LLM API调用开销。使用场景:“发现工作流”或按工作流拆分LLM花费。

caveman-discover 是什么?

该技能(skill)用于自动扫描代码仓库,识别所有调用LLM(大语言模型)的工作流(workflow),并为 Caveman Cloud 的API网关请求打上对应的工作流标签。工作流是指代码执行的某个具体任务(如“回复支持工单”、“生成夜间摘要”),而非技术名称。技能会从HTTP/RPC处理器、定时任务、CLI命令、测试框架等入口点遍历仓库,为每个工作流生成符合网关规范的slug名称(小写字母、数字、连字符和下划线)。然后以表格形式向用户提议标签方案,获得同意后才修改代码。支持通过Caveman SDK、原生提供商标SDK(OpenAI/Anthropic/LangChain等)的请求头、包装后的编码代理(caveman wrap)或原始HTTP请求添加 `x-cave-workflow` 标签。最后会验证标签是否生效,并生成包含工作流列表、验证结果和未路由流量说明的报告。该技能适用于Caveman Cloud平台,强调幂等性(重新运行不产生变化)和用户审批流程。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-discover

Installed? Explore more 生产力与协作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

你正在为 Caveman Cloud 标记此仓库的LLM工作流。一个工作流是代码执行的一件“工作”——例如“回复支持工单”、“构建夜间摘要”、“运行评估套件”——而不是某个技术名称。每个网关请求都可以携带一个工作流标签;未标记的流量会全部落入一个 unlabeled-workflow 桶中。你的任务:找到工作流,起好名字,连接标签,并验证一切正常。

这会修改代码,因此必须通过用户的正常评审流程:先提出表格,用户同意后再应用。 在已经标记过的仓库上重新运行必须不产生任何更改(幂等)。

此技能由操作者触发。一个 unlabeled-traffic Cave Plan观察报告仅用于查看,不会创建建议文件、提案或草稿PR。不要推断遥测数据选择了某个调用点或授权了编辑。独立盘点仓库,呈现标签表格,等待用户批准后再修改代码。

步骤1 — 盘点工作流

从仓库的入口点遍历,而不是从其导入开始:

  • 调用LLM的HTTP/RPC处理器(直接调用或通过中间层)
  • 定时任务:cron定义、队列消费者、Worker、调用LLM代码的GitHub Actions
  • CLI命令和脚本(scripts/、bin/、package.json脚本)
  • 真正消耗Token的评估/测试框架
  • 框架中的独立Agent或Chain(每个LangGraph图、每个crew、每个Agent定义通常是一个独立工作流)

一个工作流 = 一个人类能命名的任务。同一个请求处理器内的十个调用点属于一个工作流;一个被三个任务共享的 llm.ts 辅助工具对应三个工作流(在调用方标记,绝不要在共享辅助工具处标记)。

步骤2 — 命名

Slug语法(网关强制要求):小写 [a-z0-9_-],长度1-96个字符。描述任务本身,而非技术:

  • 好例子:support-reply、nightly-digest、pr-review、eval-suite、onboarding-email
  • 坏例子:openai-calls(技术名称)、main(无意义)、SupportReply(无效)、johns-test-3(不持久)

名称几乎是永久的——重命名会分割花费历史。当从代码无法明确看出任务目的时,从文件名派生slug并在表格中标记为 review,而不是自行发明一个目的。

步骤3 — 提议,然后应用

呈现此表格并询问是否继续:

| workflow | job | where | how it gets labeled |
|---|---|---|---|
| support-reply | answers inbound tickets | src/bot/reply.ts:41 | defaultHeaders on the reply client |
| nightly-digest | 02:00 summary job | jobs/digest.ts:12 | header on the digest client |
| eval-suite (review) | scripts/eval.ts:8 — purpose inferred from filename | scripts/eval.ts:8 | env override at invocation |

然后使用该调用点可用的最轻量机制连接每个标签:

  • @caveman-ai/sdk / caveman_cloud SDK:使用每次跟踪的 workflow 选项,或者单任务服务构造的客户端上的 defaultWorkflow。
  • 原生提供商SDK(OpenAI/Anthropic/LangChain/LiteLLM/Vercel):在已经携带 x-cave-api-key 的 defaultHeaders / default_headers / extra_headers 块中添加 "x-cave-workflow": "<slug>"。被多个任务共享的客户端 → 在每次调用时传递请求头(上述所有SDK都支持按请求覆盖请求头),或者为每个任务创建自己的独立客户端。
  • 包装后的编码代理(caveman wrap):在调用点(cron行、CI步骤)使用 --workflow <slug> 标志或 CAVE_WORKFLOW=<slug> 环境变量。
  • 原始HTTP:将 x-cave-workflow 请求头添加到请求中。

在调用方处标记,保持diff最小化,与仓库风格一致。如果某个调用点根本没有通过Caveman网关路由,不要为其打标签——在报告的“未连接”部分列出(标签仅随网关流量传输;连接是caveman-setup技能的任务)。

步骤4 — 验证

运行仓库已经用于执行一条已标记路径的任何方法(一个测试、一个开发脚本、一条curl命令)。然后确认:请求仍然成功(网关会拒绝无效标签并返回400 cave_invalid_request_header — 如果出现这种情况则修复slug)。标记后的花费将在仪表板的 /activity?tab=workflows 上显示,每个工作流下次运行时可见;定时任务会在调度触发时显示,这一点应在报告中说明,而不是假装它们已经生效。

步骤5 — 报告

## Workflows labeled

| workflow | job | where |
|---|---|---|
| support-reply | answers inbound tickets | src/bot/reply.ts:41 |
| nightly-digest | 02:00 summary job | jobs/digest.ts:12 |

Verified: <the labeled path you actually exercised, and what you observed>
Lands at: <DASHBOARD>/activity?tab=workflows — each row appears as that workflow
next runs. Anything still unlabeled shows as `unlabeled-workflow`.
Not wired (no gateway routing, so no label): <list or "none">
Marked review: <slugs whose purpose was inferred from filenames, or "none">

如果完全没有找到任何LLM入口点:直接说明,并指向设置技能(<docs origin>/docs/agent-setup.md),而不是编造一个表格。

Individual skills in this repo

This repo contains 12 individual skills — each has its own dedicated page.

JuliusBrussee/caveman-evidence-review

Read-only review of Caveman Cloud evidence: cost, Cave Score, workflows, traces, latency, errors, routing, savings. Use when asked what Caveman found or where LLM spend goes.

JuliusBrussee/caveman-explore

Read-only repository explorer for cold-start orientation, broad cross-file localization, or when a direct search failed. Skip it when the exact file or symbol is already named. Returns path:line citations only; its reads stay out of main context.

JuliusBrussee/caveman-learn

Act on a Caveman learn report - review the ranked token sinks, apply cost-lowering fixes with per-edit consent, and report what those fixes returned. Use when asked to lower an agent's token cost, what caveman has saved, to trim a heavy CLAUDE.md, or to offload re-pasted context into cavemem.

JuliusBrussee/caveman-manage

Inspect Caveman Cloud's experiment lifecycle and block unsafe execution. Use when asked to start, approve, cancel, promote or roll back a Caveman experiment.

JuliusBrussee/caveman-optimize

Turn a Caveman optimization observation into an operator-chosen candidate with a paired baseline evaluation. Use when asked to inspect or evaluate a Caveman optimization report. Needs explicit approval.

JuliusBrussee/caveman-setup

Wire a repository through the Caveman Cloud gateway so every LLM request is measured, with no behavior change. Use for "set up caveman" or adding LLM spend observability.

JuliusBrussee/investigate-first

Diagnose ambiguous failures before editing. Use for unknown causes, intermittent behavior, performance regressions, or investigations needing evidence-ranked hypotheses.

JuliusBrussee/lean-build

Build feature work with high overbuilding risk. Use for new behavior, product slices, or integrations where repository reuse, strict scope, and an explicit stop condition matter.

JuliusBrussee/migration

Implement reversible compatibility-safe transitions. Use for schema, data, API, protocol, configuration, or dependency migrations requiring rollback and preservation proof.

JuliusBrussee/safe-refactor

Restructure code while preserving behavior. Use for extraction, consolidation, ownership moves, or cleanup where verification must bracket structural edits.

JuliusBrussee/surgical-patch

Fix bugs and small behavior changes at the narrowest responsible layer. Use when regression proof, preserved surrounding behavior, and task-relevant tests matter.

JuliusBrussee/verify-and-stop

Prove existing work meets acceptance conditions without expanding scope. Use for validation-only tasks, completion checks, focused gate runs, and last-mile proof.

相关技能