caveman-discover skill
Find and label every LLM workflow in the repository so Caveman Cloud groups spend by workflow instead of one bucket. Use for "discover workflows" or breaking LLM spend down by workflow.
Is the caveman-discover skill safe?
Clean: nothing in its files matched our rules. We read 1 file in the folder on 2026-10-25.
No findings.
Install the caveman-discover skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/JuliusBrussee/caveman.git /tmp/caveman mkdir -p ~/.claude/skills cp -r /tmp/caveman/skills/caveman-discover ~/.claude/skills/caveman-discover
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
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:
that invoke LLM code
- HTTP/RPC handlers that call an LLM (directly or through layers)
- Scheduled jobs: cron definitions, queue consumers, workers, GitHub Actions
crew, each agent definition is usually its own workflow)
- 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
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:
onboarding-email
- Good: support-reply, nightly-digest, pr-review, eval-suite,
johns-test-3 (won't age)
- Bad: openai-calls (tech), main (says nothing), SupportReply (invalid),
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:
defaultWorkflow on the client a single-job service constructs.
- @caveman-ai/sdk / cavemancloud SDK**: per-trace workflow option, or
"x-cave-workflow": "" to the same defaultHeaders / defaultheaders / extraheaders 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.
- Raw provider SDKs (OpenAI/Anthropic/LangChain/LiteLLM/Vercel): add
CAVE_WORKFLOW= env at the invocation site (cron line, CI step).
- Wrapped coding agents (caveman wrap): --workflow flag or
- 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 caveinvalidrequest_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/agent-setup.md) instead of manufacturing a table.
More skills from JuliusBrussee/caveman
- AcavecrewWhen to delegate to `cavecrew-investigator` (locate code), `cavecrew-builder` (1-2 file edit) or `cavecrew-reviewer` (diff review) instead of working inline or using `Explore`. Their output is compressed, so main context lasts longer.
- AcavecrewWhen to delegate to `cavecrew-investigator` (locate code), `cavecrew-builder` (1-2 file edit) or `cavecrew-reviewer` (diff review) instead of working inline or using `Explore`. Their output is compressed, so main context lasts longer.
- AcavemanTerse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".
- AcavemanTerse caveman voice: answer first, fluff gone, every technical fact kept. Use for /caveman, "caveman mode", "talk like caveman", "be brief", "less tokens". Stays on until "stop caveman" or "normal mode".
- Acaveman-commitWrite a Conventional Commits message compressed to intent only. Use for "write a commit", "commit message", /commit or /caveman-commit.
- Ccaveman-compressCompress a memory file such as CLAUDE.md or a todo list into caveman format to save input tokens, keeping a readable backup. Sends the file's text to the configured model provider. Trigger: /caveman-compress.
- Ccaveman-compressCompress a memory file such as CLAUDE.md or a todo list into caveman format to save input tokens, keeping a readable backup. Sends the file's text to the configured model provider. Trigger: /caveman-compress.
- Acaveman-evidence-reviewRead-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.
- Acaveman-exploreRead-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.
- Acaveman-helpQuick-reference card for the three caveman skills and their commands. Trigger: /caveman-help or "caveman help".
- Acaveman-learnAct 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.
- Acaveman-manageInspect Caveman Cloud's experiment lifecycle and block unsafe execution. Use when asked to start, approve, cancel, promote or roll back a Caveman experiment.