Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

caveman-discover — Claude Code skill: what it does, how to install

Finds and labels every LLM workflow in your repository so Caveman Cloud breaks down spend by actual job rather than grouping everything into one bucket.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add JuliusBrussee/caveman --skill caveman-discover -a claude-code
Open on GitHub

What caveman-discover does

The skill inventories the repository starting from its entry points: HTTP handlers, cron jobs, queue workers, CLI scripts, and AI agent definitions. It identifies distinct user-facing tasks like support-reply or nightly-digest rather than tracking raw libraries. Shared helpers like llm.ts are left untouched; labels go directly to callers.

Before editing files, the skill presents a review table showing proposed workflow slugs, target files, and wiring methods. Gateway slugs must stay within 1 to 96 lowercase alphanumeric characters, dashes, or underscores. It then injects the x-cave-workflow header, SDK options, or environment variables into your provider clients. Callsites not routed through the Caveman gateway are skipped and noted in the report.

Run this if your traffic already passes through Caveman Cloud and you want clear attribution in /activity?tab=workflows. If you have not wired the gateway yet, configure that first because unrouted labels are ignored.

What it helps with

  • split repository LLM spend into per-task workflows in Caveman Cloud
  • inventory model callsites across handlers, cron jobs, and agent chains
  • inject x-cave-workflow headers and SDK options without breaking callers
  • verify workflow slug formatting against Caveman gateway rules

Example prompts for the agent

  • discover workflows in this repository
  • Label all LLM callsites for Caveman Cloud
  • Break down LLM spend by workflow

How to install caveman-discover

1Skills CLI (Vercel)

npx skills add JuliusBrussee/caveman --skill caveman-discover -a claude-code

2Manually: put the files in place

~/.claude/skills/caveman-discover/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/caveman-discover/

From the same set22

The whole set →
caveman JuliusBrussee Cuts filler and polite greetings from agent responses while keeping technical facts and code exact. Stays active until turned off. Claude Code CX Codex Cursor +1 591,500installs caveman-commit JuliusBrussee Generates terse Conventional Commits messages focused strictly on intent. Ideal for keeping git history clean without boilerplate or AI signatures. Claude Code CX Codex Cursor +1 414,700installs caveman-review JuliusBrussee Generates terse, single-line code review comments with exact line numbers, problems, and fixes. Eliminates conversational filler in pull request reviews. Claude Code CX Codex Cursor +1 410,700installs caveman-compress JuliusBrussee Rewrites CLAUDE.md and todo files into terse caveman-speak so the model reads fewer input tokens. The source gets overwritten; a readable backup stays out of tree. Claude Code CX Codex Cursor +1 410,300installs caveman-help JuliusBrussee A quick reference for Caveman modes and commands in Claude Code and other supported hosts. Use it when you need to control response style or find related skills. Claude Code CX Codex Cursor +1 401,800installs cavecrew JuliusBrussee cavecrew delegates code searches, small edits, and diff reviews to three subagents. Use it when keeping the main agent's context lean matters. Claude Code CX Codex Cursor +1 357,900installs caveman-stats JuliusBrussee Displays recorded output and cache-read tokens for Claude Code sessions or points to host native usage stats. Useful for tracking raw token consumption. Claude Code CX Codex Cursor +1 356,700installs caveman-explore JuliusBrussee A read-only skill locates relevant files and line ranges in a repository. Use it for cold-start orientation or broad searches. Claude Code CX Codex Cursor +1 106,500installs

Similar

browser-use browser-use Hands the agent a real Chrome over CDP: clicks, typing, screenshots, and pages that need JS or your logged-in session. Claude Code CX Codex Cursor +1 98,100installs last30days mvanhorn Pulls posts and engagement on any topic from the last 30 days across Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub and the web. Useful when you want what people actually said, not what a blog summarized. Claude Code CX Codex Cursor +1 52,400installs discernment-nudge official anthropics Adds follow-up questions that test facts, reasoning, and missing context after answers a user may act on. Use it for advice, plans, estimates, and other consequential drafts. Claude Code Claude.ai 12,227installs skill-creator official anthropics Creates and refines skills, then tests them with prompts, evaluations, and performance checks. Claude Code Claude.ai 414,180installs writing-for-agents Matt Pocock Guidance for writing skills and agent-facing documents. Use it when editing AGENTS.md, CLAUDE.md, or reference files reached from them. Claude Code 466,719installs media-use heygen-com Finds or generates media for HyperFrames videos, including voiceovers, music, cutouts, and color grades. Stores files locally in assets. Claude Code CX Codex Cursor +1 1,100,000installs mcp-builder official anthropics This skill walks through building an MCP server in TypeScript or Python, from reading the protocol spec to writing tests and evaluation questions. Claude Code Claude.ai 130,949installs subagent-driven-development Jesse Vincent This skill runs an implementation plan through fresh subagents for independent tasks and reviews each result. Use it for multi-step work in one session. Claude Code CX Codex 237,746installs

Questions about caveman-discover

How to install caveman-discover in Claude Code?

Run npx skills add JuliusBrussee/caveman --skill caveman-discover -a claude-code or save the definition to ~/.claude/skills/caveman-discover/SKILL.md.

What does caveman-discover do?

It finds LLM call sites across the codebase, assigns job-focused slugs, and wires workflow labels via headers or SDK options. This prevents telemetry from lumping all requests into unlabeled-workflow.

Does caveman-discover modify files automatically?

No. It first displays an inventory table with proposed slugs and file paths, waits for user approval, and applies changes only after you agree.

Source text

SKILL.md · Apache-2.0
---
name: caveman-discover
description: >
  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.
---

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 · Apache-2.0 · JuliusBrussee/caveman

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor