caveman-discover

作者: juliusbrussee

找出目前儲存庫中的所有 LLM 工作流程並加以標記,讓 Caveman Cloud 能根據程式碼實際執行的功能(support-reply、nightly-digest)來分組支出,而不是歸入單一的匿名類別。當使用者貼上 Caveman 探索提示、說「discover workflows」或要求按工作流程細分 LLM 支出時使用。儲存庫應已透過 Caveman 閘道路由(caveman-setup 技能負責該部分)。

npx skills add https://github.com/juliusbrussee/caveman --skill caveman-discover

You are labeling this repository's LLM workflows for Caveman Cloud. A workflow is a job the code performs — "answer a support ticket", "build the nightly digest", "run the eval suite" — not a technology. Every gateway request can carry a workflow label; unlabeled traffic all lands in one unlabeled-workflow bucket. Your job: find the workflows, name them well, wire the labels, and verify nothing broke.

This changes code, so it goes through the user's normal review: propose the table first, apply after the user agrees. Re-running on an already-labeled repo must change nothing (idempotent).

This skill is operator-invoked. An unlabeled-traffic Cave Plan observation is review-only and does not create an advisory file, proposal, or Draft PR. Do not infer that telemetry selected a callsite or authorized an edit. Independently inventory the repository, present the labeling table, and wait for the user's approval before changing code.

Step 1 — Inventory the workflows

Walk the repo from its entry points, not from its imports:

  • HTTP/RPC handlers that call an LLM (directly or through layers)
  • Scheduled jobs: cron definitions, queue consumers, workers, GitHub Actions that invoke LLM code
  • CLI commands and scripts (scripts/, bin/, package.json scripts)
  • Eval / test harnesses that burn real tokens
  • Distinct agents or chains inside a framework (each LangGraph graph, each crew, each agent definition is usually its own workflow)

One workflow = one job a human would name. Ten callsites inside the same request handler are one workflow; one shared llm.ts helper used by three jobs is three workflows (label at the callers, never the shared helper).

Step 2 — Name them

Slug grammar (the gateway enforces this): lowercase [a-z0-9_-], 1–96 chars. Name the job, not the tech:

  • Good: support-reply, nightly-digest, pr-review, eval-suite, onboarding-email
  • Bad: openai-calls (tech), main (says nothing), SupportReply (invalid), johns-test-3 (won't age)

Names are forever-ish — renaming later splits the spend history. When a job's purpose isn't clear from the code, derive the slug from the file name and mark it review in the table rather than inventing a purpose.

Step 3 — Propose, then apply

Present this table and ask to proceed:

| 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 |

Then wire each label with the lightest mechanism available at that callsite:

  • @caveman-ai/sdk / caveman_cloud SDK: per-trace workflow option, or defaultWorkflow on the client a single-job service constructs.
  • Raw provider SDKs (OpenAI/Anthropic/LangChain/LiteLLM/Vercel): add "x-cave-workflow": "<slug>" to the same defaultHeaders / default_headers / extra_headers block that already carries x-cave-api-key. Shared client used by several jobs → pass the header per call (every SDK above accepts per-request header overrides), or give each job its own thin client.
  • Wrapped coding agents (caveman wrap): --workflow <slug> flag or CAVE_WORKFLOW=<slug> env at the invocation site (cron line, CI step).
  • Raw HTTP: add the x-cave-workflow header to the request.

Label the callers, keep the diff minimal, match the repo's style. If a callsite is not routed through the Caveman gateway at all, don't label it — list it under "not wired" in the report (labels only travel on gateway traffic; wiring is the caveman-setup skill's job).

Step 4 — Verify

Run whatever the repo already uses to exercise one labeled path (a test, a dev script, one curl). Then confirm: the request still succeeds (the gateway rejects an invalid label with 400 cave_invalid_request_header — fix the slug if so). Labeled spend appears on the dashboard at /activity?tab=workflows as each workflow next runs; jobs on a schedule show up when the schedule fires, and that's worth saying in the report rather than pretending they're live.

Step 5 — Report

## 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">

If you found no LLM entry points at all: say exactly that, and point at the setup skill (<docs origin>/docs/agent-setup.md) instead of manufacturing a table.

來自 juliusbrussee 的更多技能

caveman
juliusbrussee
超壓縮溝通模式。透過穴居人式簡潔表達,減少約75%的token使用量,同時維持完整技術準確性。支援強度等級:lite、full(預設)、ultra、wenyan-lite、wenyan-full、wenyan-ultra。當使用者說「caveman mode」、「talk like caveman」、「use caveman」、「less tokens」、「be brief」或呼叫/caveman時啟用。亦會在要求token效率時自動觸發。
communicationproductivity
caveman-commit
juliusbrussee
超壓縮提交訊息生成器。去除提交訊息中的雜訊,同時保留意圖與理由。採用 Conventional Commits 格式。主旨不超過50字元,僅在「原因」不明顯時加入內文。當使用者說「寫提交」、「提交訊息」、「生成提交」、「/commit」或呼叫 /caveman-commit 時使用。暫存變更時自動觸發。
developmentcode-review
caveman-compress
juliusbrussee
將自然語言記憶檔案(CLAUDE.md、待辦事項、偏好設定)壓縮成穴居人格式以節省輸入令牌。保留所有技術內容、程式碼、網址與結構。壓縮版本會覆蓋原始檔案。人類可讀的備份會另存為FILE.original.md。觸發指令:/caveman-compress FILEPATH 或「壓縮記憶檔案」
developmentdocument
caveman-help
juliusbrussee
所有穴居人模式、技能與指令的快速參考卡。一次性顯示,非持續模式。觸發方式:/caveman-help、「caveman help」、「what caveman commands」、「how do I use caveman」。
developmentdocumentproductivity
caveman-review
juliusbrussee
超壓縮程式碼審查評論。減少PR回饋中的雜訊,同時保留可執行的關鍵資訊。每條評論僅一行:位置、問題、修正。當使用者說「審查此PR」、「程式碼審查」、「審查差異」、「/review」或呼叫/caveman-review時使用。審查拉取請求時自動觸發。
developmentcode-review
caveman-stats
juliusbrussee
顯示當前會話的實際Token使用量與預估節省金額。直接從Claude Code會話日誌讀取,無需AI估算。透過/caveman-stats觸發。輸出由mode-tracker鉤子注入,模型本身不計算數值。
developmentdata-analysis
cavecrew
juliusbrussee
We need to translate the given text from English to Traditional Chinese. The text describes a decision guide for delegating to caveman-style subagents. It mentions specific names: cavecrew-investigator, cavecrew-builder, cavecrew-reviewer, and cavecrew. These names should be preserved as is. Also, technical terms like "Explore", "diff review", "tool-result", "main context" should be preserved or appropriately translated. The instruction says to preserve product names, protocol names, URLs, numbers, and technical terms. So we keep "cavecrew-investigator", "cavecrew-builder", "cavecrew-reviewer", "cavecrew", "Explore", "diff review", "tool-result", "main context". Also "~60%" should be preserved. The text inside <text> is the entire paragraph. We need to output only the translation, no extra commentary. Let's translate carefully: "Decision guide for delegating to caveman-style subagents." -> "委派給原始人風格子代理的決策指南。" "T
developmentcode-reviewapi
caveman-explore
juliusbrussee
唯讀儲存庫瀏覽器。請主動用於冷啟動探索、廣泛的跨檔案定位,或當直接搜尋失敗而需要找出某個東西所在位置時。當問題已指明確切檔案或符號,或先前回合已回傳可用的 file:line 證據時,請略過。僅回傳精簡的 path:line 引用;其讀取與 grep 操作不會進入主要對話。