new-relo: Skill for Claude Code

.claude/skills/kv/SKILL.md

kv is a skill for Claude Code from reloru/new-relo. It costs 170 tokens per session (3,372 once invoked), scanned C, original, MIT.

A skill for inspecting and carefully editing the production WEATHER KV namespace used by crosbynews.com. KV is a key-value store for cached data, such as weather, calendar, water, fishing, pollen, traffic, and news information.

In plain words
What is it for?
Reading and managing the listed production cache keys with Wrangler's remote KV commands, including checking or clearing stale local development state when needed.
Why use it?
It prevents confusion between production data and the local development cache, which can persist old values.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter.

This is reloru/new-relo's own configuration. It tells Claude Code how to work on new-relo itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything new-relo configures →

Reuse

Borrowing it

Nothing to install: this file belongs to reloru/new-relo. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/reloru/new-relo/main/.claude/skills/kv/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/reloru/new-relo

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for kv

README.md
[![agentmods](https://agentmods.dev/badge/skills/reloru/new-relo/kv/github.svg)](https://agentmods.dev/skills/reloru/new-relo/kv)
Your own site
<a href="https://agentmods.dev/skills/reloru/new-relo/kv"><img src="https://agentmods.dev/badge/skills/reloru/new-relo/kv/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for kv

Your own site · 80×15
<a href="https://agentmods.dev/skills/reloru/new-relo/kv"><img src="https://agentmods.dev/badge/skills/reloru/new-relo/kv.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 170 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,372 The whole file, excluding the scripts and references it only reads on demand.
Security scan C 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00170 $0.03372
Opus 5.5 $0.00068 $0.01349
Sonnet 5.5 $0.00034 $0.00674
Haiku 4.5 $0.00017 $0.00337

Measured 1mo ago against content hash 124752e1baf2, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade C, and why

kv scanned grade C with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Recursive force deletehighDestructive command

rm -rf with a variable or a broad path is one typo away from removing the wrong tree.

rm -rf .wrangler/state # next `wrangler dev` starts truly empty
.claude/skills/kv/SKILL.md · 192 lines

How it starts

The opening of the file, as written. The whole thing — 192 lines — stays where its author put it; the contents beside it link to each section on GitHub.

WEATHER KV

Read and manage the WEATHER KV namespace. Run from the repo root so wrangler resolves --binding WEATHER from wrangler.jsonc (namespace id da96de7daed84b69b32778058b374d5f is the fallback via --namespace-id).

The one rule: always --remote

wrangler kv key ... defaults to local miniflare state. Without --remote, a get reports "Value not found" even though production has the key. Every command below passes --remote — keep it.

And local state PERSISTS across runs. It lives in .wrangler/state/v3/kv/ (gitignored) and survives wrangler dev restarts, reboots, and days of elapsed time — so "a fresh local dev server" is not a cold cache. A local run cold-warms KV once and every later run reads that same snapshot back, however old it is.

This is not academic: a wrangler dev session on 2026-08-05 was served a weather value written on 2026-08-01, whose 48 hourly periods had all elapsed two days earlier — and it was briefly misread as an empty cache, because "local dev must be cold" is the intuitive assumption and it is wrong. To get a genuinely cold local cache, delete the state:

rm -rf .wrangler/state          # next `wrangler dev` starts truly empty

The nine content keys (different owners, different risk)

  • weather — NWS forecast + active alerts, shape { updated, place, periods, hourly, alerts } (hourly is the array loadWeather() checks to decide the cache is fresh). Written by the cron (*/15 * * * *) and warmed by loadWeather() on a cold cache. Inspecting is safe; a bad or deleted value self-heals within 15 min (or on the next request). Low risk.
  • calendar — Crosby ISD school calendar, shape { updated, events: [{ summary, location, start, allDay, end }] } (events is the array loadCalendar() checks for freshness). Written by the same cron (throttled to ~24h — Crosby ISD's calendar changes rarely) and warmed by loadCalendar() on a cold cache. Like weather, a bad/deleted value self-heals on the next cron or request. Low risk.
  • water — river/bayou gauges, shape { updated, gauges: [...] } (gauges is what loadWater() checks). Written by the same cron every tick; cold-warms on read. Self-heals like weather. Low risk.
  • fishing — USGS real-time water conditions for the waters people fish, shape { updated, stations: [{ id, params:{tempC,do,ph,turb,gageFt}, observed }] } (stations is what loadFishing() checks). Written by the same cron every tick; cold-warms on read. Self-heals like water. Low risk.
  • tropics — Atlantic tropical outlook from two NHC products, shape { updated, storms: [...], disturbances: [...] | null, outlookIssued }. storms is NHC CurrentStorms.json (named cyclones only); disturbances is the Tropical Weather Outlook (areas being watched, with formation chances). loadTropics() checks BOTH are arrays and cold-warms otherwise, which is what migrates pre-2026-08 entries that carry no disturbances. An empty storms is the normal quiet-basin state, NOT an error — but on its own it is not an all-clear, which is the bug this shape exists to prevent. disturbances: null means the outlook could not be read and is NOT the same as [] (nothing being watched); hand-editing one into the other makes the page assert a quiet basin nobody confirmed. Written by the same cron, throttled ~1h June-November (Atlantic hurricane season, Central time) and ~24h the rest of the year; cold-warms on read. Self-heals. Low risk.
  • pollen — the Houston Health Department's measured daily pollen & mold count, shape { updated, countDate, url, groups: {tree,weed,grass,mold}, species } (loadPollen() checks groups + countDate; countDate is the CT calendar day the count is for — weekends carry Friday's, that's normal). Written by the same cron, skipped entirely on Sat/Sun (Central time) and on weekdays only when the cached countDate isn't today's date yet — HHD publishes one count per weekday morning, so this is "have we got today's count" rather than a flat age throttle — and at most hourly, since that condition never settles on a day HHD publishes nothing (City of Houston holidays) and would otherwise retry all 96 ticks; cold-warms on read. Self-heals. Low risk. A frozen countDate with a fresh updated is the failure to look for here — it means selection is missing published counts, not that the fetch is broken (four occurrences Aug-Sep 2026, all silent; see docs/pages/pollen.md). .github/workflows/pollen-watch.yml now files a pollen-watch issue when HHD's index advertises a count newer than /api/pollen serves.
  • burnban — Harris County outdoor-burning ban status from the Texas A&M Forest Service, shape { updated, status, startDate, statusSince, trackingSince } (loadBurnBan() checks status is "Yes" or "No"; startDate is ISO or null). Don't hand-write statusSince / trackingSince — trackingSince is the first observation ever and never moves, statusSince moves only on a real status flip, and when they are EQUAL the page says "unchanged since we began tracking" rather than claiming a transition. Faking them makes /burn-ban assert a ban ended on a day it did not. Deleting the key is safe: the next cron reseeds both to now, which reads honestly as "no observed history yet". Written by the same cron, throttled ~4h (TFS's feed updates roughly daily, on a county judge's order rather than a schedule); cold-warms on read. Self-heals. Low risk.
  • traffic — Crosby-corridor road incidents + lane closures from Houston TranStar's public RSS feeds, shape { updated, incidents, closures } (loadTraffic() checks that incidents is PRESENT — either side is null when that feed was unreachable at the last refresh, vs [] = quiet roads, the normal state). Written by the same cron every tick; cold-warms on read. Self-heals. Low risk.
  • news — local news, shape { updated, items: [...], source }. Written ONLY out-of-band by scripts/fetch-news.mjs (a Claude routine); the Worker just renders it. Overwriting or deleting news loses the snapshot until the next routine run (up to ~a day). Treat writes/deletes here as destructive.

Read the full file on GitHub · 192 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 1mo ago Changed · +19 lines · +31 tokens per session 124752e1baf2
  2. 1mo ago Changed · +8 lines 44e5713e3fb3
  3. 2mo ago First seen · 165 lines · 139 tokens per session scan C d6c4df76337b

Subscribe to this mod's changes

kv is a skill published in the GitHub repository reloru/new-relo (1 stars, last pushed 7d ago), licensed MIT. It adds 170 tokens to every session and 3,372 once invoked, about $0.0007 per session on Opus 5.5. A static security scan graded it C with 1 finding (recursive force delete). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

haven-db

Reset, reseed, locate and prune a haven stack's databases with haven db, and know which verbs destroy data. Use when someone says 'haven db', 'reset the database', 'drop the database', 'reseed in place', 'db preset', 'demo preset', 'database url', 'connection string for postgres', 'haven db prune', 'haven seed'…

langwatch/langwatch · 116 tokens

redis-js

Work with the Upstash Redis JavaScript/TypeScript SDK for serverless Redis operations. Use for caching, session storage, rate limiting, leaderboards, full-text search (querying, filtering, aggregating with @upstash/redis search extension), and all Redis data structures. Supports automatic serialization/deserialization…

upstash/redis-js · 93 tokens

using-redis-token-buckets

Use when adding a bucket-like rate limit backed by Redis: a per-caller budget with burst capacity and continuous refill, a refund path for requests that did no work, or a limit whose Retry-After must be a real wait rather than a window edge. posthog/tokenbucket.py provides an atomic Lua token bucket (consume, refund…

PostHog/posthog-foss · 148 tokens

byted-milvus

Manages Milvus on Volcano Engine (Volcengine): provision/inspect/scale/delete clusters and run collection + CRUD/search operations via bundled CLIs. Use when the user mentions Milvus + Volcengine/Volcano Engine or asks to operate Milvus there.

bytedance/agentkit-samples · 0 tokens

bex-keyvalue

Provisions and configures bex Key Value (Redis-compatible Valkey 8) instances for caching, session storage, and job queues. Use when the user needs Key Value, uses Redis or Valkey, or needs a cache, session store, or job queue backend, or needs to configure maxmemory policy, ipAllowList, connection strings, or…

bex-co/bex · 117 tokens

background-job-orchestrator

Expert in background job processing with Bull/BullMQ (Redis), Celery, and cloud queues. Implements retries, scheduling, priority queues, and worker management. Use for async task processing, email campaigns, report generation, batch operations. Activate on "background job", "async task", "queue", "worker", "BullMQ"…

curiositech/some_claude_skills · 95 tokens