Sentry Instrument
getsentry/sentry-for-ai
Instrument an application with Sentry — detect the platform, install and initialize the SDK if needed, and wire up any signal — error monitoring, tracing/performance, logging, metrics, profiling…
Routes every LLM call in a repository through the Caveman Cloud gateway in record mode, so requests and costs are measured without changing behavior.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add JuliusBrussee/caveman --skill caveman-setup -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install JuliusBrussee/caveman caveman-setup --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/JuliusBrussee/caveman.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/caveman-setup .claude/skills/caveman-setup && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "caveman-setup" agent skill from https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setup into .claude/skills/caveman-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caveman-setup", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setupType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add JuliusBrussee/caveman --skill caveman-setup -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install JuliusBrussee/caveman caveman-setup --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliusBrussee/caveman.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/caveman-setup .agents/skills/caveman-setup && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "caveman-setup" agent skill from https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setup into .agents/skills/caveman-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caveman-setup", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JuliusBrussee/caveman --skill caveman-setup -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install JuliusBrussee/caveman caveman-setup --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliusBrussee/caveman.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/caveman-setup .cursor/skills/caveman-setup && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "caveman-setup" agent skill from https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setup into .cursor/skills/caveman-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caveman-setup", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/JuliusBrussee/caveman.git --path skills/caveman-setup--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add JuliusBrussee/caveman --skill caveman-setup -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install JuliusBrussee/caveman caveman-setup --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliusBrussee/caveman.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/caveman-setup .gemini/skills/caveman-setup && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "caveman-setup" agent skill from https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setup into .gemini/skills/caveman-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caveman-setup", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install JuliusBrussee/caveman caveman-setupInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add JuliusBrussee/caveman --skill caveman-setup -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/JuliusBrussee/caveman.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/caveman-setup .github/skills/caveman-setup && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "caveman-setup" agent skill from https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setup into .github/skills/caveman-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caveman-setup", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add JuliusBrussee/caveman --skill caveman-setup -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install JuliusBrussee/caveman caveman-setup --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JuliusBrussee/caveman.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/caveman-setup .opencode/skills/caveman-setup && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "caveman-setup" agent skill from https://github.com/JuliusBrussee/caveman/tree/main/skills/caveman-setup into .opencode/skills/caveman-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "caveman-setup", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
caveman-setupRoutes every LLM call in a repository through the Caveman Cloud gateway in record mode, so requests and costs are measured without changing behavior.
The agent integrates a repo with the Caveman gateway, a byte-preserving LLM proxy that in record mode measures what the app sends and what it costs, and changes nothing else. It needs four values from the prompt that started it: the gateway URL, an API key for the gateway, whether provider keys are stored in Caveman Cloud or sent per request, and the dashboard URL. If any is missing, it stops and asks, and it never guesses a URL or mints a key.
The rules call for a minimal, verified integration. The agent finds every live LLM callsite by reading dependency files and searching for SDK imports and raw HTTP calls to provider APIs, wires each through existing configuration, keeps the gateway key in the repo's env file, adding that file to .gitignore if needed, and never touches provider keys. The final report states the HTTP status and usage numbers from a real verification call. It enables no optimization and claims no savings.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2e08b91. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
gateway.caveman.soFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CAVE_API_KEYPROVIDER_KEYOPENAI_API_KEYANTHROPIC_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Caveman Gateway Setup loads about 2.6k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 1,080 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
already uses (`.env`, `.env.local`, …). If that file isn't gitignored, add itverification request. Send it now — do not pause to ask permission for it.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from JuliusBrussee/caveman at commit 2e08b91, republished under its Apache-2.0 licence (© JuliusBrussee). 1,080 words, ~2,609 tokens.
.claude/skills/caveman-setup/SKILL.md (or your agent's skills folder).You are wiring this repository through the Caveman gateway. Caveman is a byte-preserving LLM proxy: in record mode it measures what your app sends and what it costs, and changes nothing else. Your job is a minimal, verified integration — not a refactor.
The prompt that sent you here provides four values. Refer to them as:
GATEWAY — the gateway base URL (e.g. https://gateway.caveman.so or http://127.0.0.1:8787)CAVE_API_KEY — the gateway auth secret (treat like any API key: env var only, never committed, never printed in full)PROVIDER_KEYS — stored (provider keys live encrypted in Caveman Cloud) or byok (this app sends its own provider key per request)DASHBOARD — the dashboard base URL (e.g. https://app.caveman.so)If any value is missing, stop and ask for it. Do not guess a URL or mint a key.
CAVE_API_KEY goes into the env file the repo
already uses (.env, .env.local, …). If that file isn't gitignored, add it
to .gitignore and say so. Never hardcode the key in source.PROVIDER_KEYS: stored you
never see one. With byok, the app's existing provider key stays exactly
where it already is.Read dependency files (package.json, requirements.txt, pyproject.toml,
go.mod, lockfiles) and search the source for LLM clients:
openai, @anthropic-ai/sdk, anthropic, ai +
@ai-sdk/* (Vercel), langchain*, litellm, google-genai /
@google/genai, crewai, pydantic_ai, openai-agents / agentsapi.openai.com, api.anthropic.com, generativelanguage.googleapis.comOPENAI_BASE_URL, OPENAI_API_BASE,
ANTHROPIC_BASE_URL, GEMINI_BASE_URL, GOOGLE_GEMINI_BASE_URLList what you found (file:line per callsite) before changing anything. If you find no LLM callsites, stop and report the "nothing to wire" template at the end of this file — do not invent an integration.
One slug names this app in the gateway path: GATEWAY/w/<app>. Derive it from
the package/module name (e.g. support-bot, acme-api). Grammar:
lowercase [a-z0-9] first, then [a-z0-9._-], max 64 chars. Spend for this
whole app groups under that slug on the dashboard.
The pattern is always the same: base URL → the gateway with /w/<app>,
plus one auth header. Gateway auth is x-cave-api-key: CAVE_API_KEY
(Authorization: Bearer CAVE_API_KEY also works where a header is awkward).
With PROVIDER_KEYS: byok, also send x-cave-upstream-key: <the provider key the app already uses>.
Two facts that make the wiring safe (both are gateway-enforced, not hopes):
the gateway rebuilds upstream auth headers from scratch, so a client's
Authorization/x-api-key value is never forwarded to the provider; and with
stored, upstream auth comes from the encrypted connection server-side. So in
stored mode, where an SDK insists on an api-key parameter, set it to the
Cave key — it authenticates the gateway and goes no further.
Exact shapes (use the one matching each callsite — these are the product's published recipes, not suggestions):
OpenAI SDK (TS) — Chat Completions and Responses both route through:
const client = new OpenAI({
baseURL: `${process.env.CAVE_GATEWAY_URL}/w/<app>/openai/v1`,
apiKey: process.env.OPENAI_API_KEY, // byok: unchanged · stored: use CAVE_API_KEY
defaultHeaders: {
"x-cave-api-key": process.env.CAVE_API_KEY!,
// byok only:
"x-cave-upstream-key": process.env.OPENAI_API_KEY!,
},
});OpenAI SDK (Python) — same shape: base_url=f"{gw}/w/<app>/openai/v1",
default_headers={"x-cave-api-key": ..., "x-cave-upstream-key": ...}.
Anthropic SDK (TS/Python) — the SDK appends /v1/messages itself. The
x-cave-api-key header is required here in both modes (this SDK's own key
param rides x-api-key, which is not a gateway-auth header):
client = anthropic.Anthropic(
base_url=f"{os.environ['CAVE_GATEWAY_URL']}/w/<app>",
api_key=os.environ["ANTHROPIC_API_KEY"], # byok: unchanged · stored: use CAVE_API_KEY
default_headers={
"x-cave-api-key": os.environ["CAVE_API_KEY"],
# byok only:
"x-cave-upstream-key": os.environ["ANTHROPIC_API_KEY"],
},
)Vercel AI SDK — createOpenAICompatible({ baseURL: ${gw}/w/<app>/openai/v1, headers: { "x-cave-api-key": ... } }); Anthropic models via
createAnthropic({ baseURL: ${gw}/w/<app>/v1, headers: { ... } }).
LangChain / LangGraph — ChatOpenAI(base_url=f"{gw}/w/<app>/openai/v1", default_headers={...}); ChatAnthropic(base_url=f"{gw}/w/<app>", default_headers={...}). LangGraph inherits whatever model you pass it.
LiteLLM — per call api_base=f"{gw}/w/<app>/openai/v1" +
extra_headers={...}, or fleet-wide in the LiteLLM proxy config.yaml.
Raw HTTP / anything else — swap the host, keep the provider's native path:
GATEWAY/w/<app>/v1/chat/completions (OpenAI protocol) or
GATEWAY/w/<app>/v1/messages (Anthropic protocol), add the header(s).
Concretely, with slug support-bot and the hosted gateway, an OpenAI-SDK base
URL reads https://gateway.caveman.so/w/support-bot/openai/v1. And in stored
mode, drop every x-cave-upstream-key line entirely — it is byok-only.
For frameworks not listed (google-genai, crewai, pydantic-ai, openai-agents),
fetch the matching page under <docs origin>/docs/integrations/ — same origin
this skill came from — and follow it.
Add to the repo's env file (and reference from code — no literals):
CAVE_GATEWAY_URL=<GATEWAY>
CAVE_API_KEY=<CAVE_API_KEY>The user pasted the setup prompt to authorize exactly this: one small verification request. Send it now — do not pause to ask permission for it. An integration that ends unverified because you hesitated is a worse outcome than one tiny request; finishing the verification and the report autonomously is the point of this skill.
Send one minimal request through the wiring you just built — the app's own
cheapest path if it has a script for it, otherwise curl on the path matching
the protocol you just wired with the app's own model and a small cap
(max_tokens ≤ 32):
# OpenAI-protocol wiring:
curl -sS "$CAVE_GATEWAY_URL/w/<app>/v1/chat/completions" \
-H "x-cave-api-key: $CAVE_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"<model the repo already uses>","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
# Anthropic-protocol wiring:
curl -sS "$CAVE_GATEWAY_URL/w/<app>/v1/messages" \
-H "x-cave-api-key: $CAVE_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"<model the repo already uses>","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'(byok: add -H "x-cave-upstream-key: $PROVIDER_KEY".) This is one real,
billable provider request — that is the point: real traffic, real measurement.
Read the response. Success = HTTP 200 with a usage block. Anything else =
the matching failure template below.
End with exactly this shape, values filled from what you actually did and saw:
## Caveman is live in this repo
Wired: <n> callsite(s) in <n> file(s)
- <file> — <one-line what changed>
App slug: <app> — spend for this app groups under it
Verified: HTTP 200 · model <model> · <in> in / <out> out tokens (one real request)
Mode: record — measured only. No model-visible bytes changed, no optimization
enabled. Verified savings are $0 until you turn an optimizer on and it passes
its eval gate. That honesty is the product.
See the dollars: <DASHBOARD>/traces — your request is the top row, priced from
the public catalog. <DASHBOARD>/getting-started flips to "First request received."
Want spend split by workflow (e.g. support-reply vs nightly-digest), not just
by app? Say "discover workflows" — I'll fetch <docs origin>/docs/discover-workflows.md
and label every callsite by the job it does.caveman wrap <agent> instead — see
<DASHBOARD>/getting-started."<error>). Wiring is in place but unverified — nothing will be measured
until the gateway is reachable. Check the URL and network, then re-run the
verification curl above."<DASHBOARD>/getting-started and update the env file; the wiring
itself is unchanged."<app> slug (lowercase [a-z0-9] first, then [a-z0-9._-], max 64)
or a path that doesn't match the SDK's protocol. Fix the URL and re-verify."Never report success on any of these. An unverified integration is reported as unverified.
© JuliusBrussee, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/caveman-setup of JuliusBrussee/caveman.
Open the folder on GitHubat commit 2e08b91
We found 1 copy of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in JuliusBrussee/caveman, which our catalogue first saw on October 7, 2026.
Caveman Gateway Setup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Caveman Gateway Setup this skillJuliusBrussee/caveman | 111k | 1 repos | ~2.6k | Automated safety check: Warn | Apache-2.0 | |
| Sentry Instrumentgetsentry/sentry-for-ai | 268 | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| App Observabilitygrafana/skills | 281 | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Ag2 Telemetryag2ai/build-with-ag2 | 252 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Monitoring Observabilityyonatangross/orchestkit | 290 | — | ~2.2k | Automated safety check: Pass | MIT | |
| AI Observabilityomer-metin/skills-for-antigravity | 162 | — | ~578 | Automated safety check: Pass | Apache-2.0 |
getsentry/sentry-for-ai
Instrument an application with Sentry — detect the platform, install and initialize the SDK if needed, and wire up any signal — error monitoring, tracing/performance, logging, metrics, profiling…
grafana/skills
Get RED metrics + service maps + frontend RUM + AI/LLM monitoring out of Grafana Cloud — Application Observability (tracesspanmetrics from OTel traces, p50/p95/p99 latency, exemplar-to-trace…
ag2ai/build-with-ag2
Add OpenTelemetry traces to an AG2 beta Agent via TelemetryMiddleware (autogen.beta.middleware.builtin).
yonatangross/orchestkit
Monitoring and observability patterns for Prometheus metrics, Grafana dashboards, Langfuse v4 LLM tracing (astype, scorecurrentspan, shouldexportspan, LangfuseMedia), and drift detection.
omer-metin/skills-for-antigravity
Implement comprehensive observability for LLM applications including tracing (Langfuse/Helicone), cost tracking, token optimization, RAG evaluation metrics (RAGAS), hallucination detection, and…
FailproofAI/failproofai
Helps instrument a custom Python or TypeScript agent to record events for Failproof AI, verify what gets written, and run an evaluator worker that scores the runs.
JuliusBrussee/caveman
Finds every LLM workflow in a repository, proposes a labeling table and, once you agree, wires labels so Caveman Cloud groups spend per workflow.
JuliusBrussee/caveman
Read-only review of Caveman Cloud data to explain where LLM spend goes: cost, score, workflows, traces, latency, errors, routing and verified savings.
JuliusBrussee/caveman
Reads the state and results of Caveman Cloud experiments and reports one recommendation or a block, without changing an experiment's lifecycle itself.
JuliusBrussee/caveman
Turns a Caveman report-only optimization observation into one minimal code change and a paired baseline evaluation, after the operator picks which to pursue.
JuliusBrussee/caveman
Quick-reference card for the three caveman skills and their commands. Trigger: /caveman-help or "caveman help".
JuliusBrussee/caveman
Switches the agent to a terse reply style that gives the answer first, drops filler, and keeps every technical fact, command and number exact.
Categories
Routes every LLM call in a repository through the Caveman Cloud gateway in record mode, so requests and costs are measured without changing behavior. The agent integrates a repo with the Caveman gateway, a byte-preserving LLM proxy that in record mode measures what the app sends and what it costs, and changes nothing else. It needs four values from the prompt that started it: the gateway URL, an API key for the gateway, whether provider keys are stored in Caveman Cloud or sent per request, and the dashboard URL.
Caveman Gateway Setup fits situations like: adding spend observability for LLM calls to an existing codebase; setting up Caveman Cloud for a repository; finding all the LLM callsites in a project and routing them through a gateway.
Run `npx skills add JuliusBrussee/caveman --skill caveman-setup -a claude-code`. Or copy the skill folder (skills/caveman-setup in JuliusBrussee/caveman) into .claude/skills/caveman-setup in your project. Claude Code loads it when a task matches its description.
Run `npx skills add JuliusBrussee/caveman --skill caveman-setup -a codex`. Or copy the skill folder (skills/caveman-setup in JuliusBrussee/caveman) into .agents/skills/caveman-setup in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add JuliusBrussee/caveman --skill caveman-setup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/caveman-setup, .gemini/skills/caveman-setup, .github/skills/caveman-setup and .opencode/skills/caveman-setup in your project.
Going by SKILL.md and its folder, Caveman Gateway Setup needs the command-line tools its instructions call (curl) and credentials named CAVE_API_KEY, PROVIDER_KEY, OPENAI_API_KEY and ANTHROPIC_API_KEY. Our summary lists: A Caveman gateway URL, gateway API key and dashboard URL; Network access to the gateway.
SKILL.md names 1 domain. In commands or code: gateway.caveman.so; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): tells the agent its actions are pre-authorized / not to stop for confirmation. Read the flagged lines before installing; the check is not a guarantee either way.
Caveman Gateway Setup is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Caveman Gateway Setup: Sentry Instrument (getsentry/sentry-for-ai, 268 stars), App Observability (grafana/skills, 281 stars), Ag2 Telemetry (ag2ai/build-with-ag2, 252 stars) and Monitoring Observability (yonatangross/orchestkit, 290 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
JuliusBrussee (a GitHub user) maintains it in JuliusBrussee/caveman, which has 110,632 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 8, 2026.
Source: JuliusBrussee/caveman on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.