Temporal Developer
temporalio/skill-temporal-developer
Develop, debug, and manage Temporal applications across Python, TypeScript, Go, Java, .NET, Ruby, and Rust.
Inspect the Bike Index production Rails logs downloaded by binxlogs and streamed with binxcat web / binxcat worker — JSON-per-request (Lograge) on web plus free-form background-job lines on worker…
$ npx skills add bikeindex/bike_index --skill production-log-inspection -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bikeindex/bike_index production-log-inspection --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/bikeindex/bike_index.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/production-log-inspection .claude/skills/production-log-inspection && 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 "production-log-inspection" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspection into .claude/skills/production-log-inspection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "production-log-inspection", 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/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspectionType 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 bikeindex/bike_index --skill production-log-inspection -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bikeindex/bike_index production-log-inspection --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/production-log-inspection .agents/skills/production-log-inspection && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "production-log-inspection" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspection into .agents/skills/production-log-inspection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "production-log-inspection", 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 bikeindex/bike_index --skill production-log-inspection -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bikeindex/bike_index production-log-inspection --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/production-log-inspection .cursor/skills/production-log-inspection && 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 "production-log-inspection" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspection into .cursor/skills/production-log-inspection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "production-log-inspection", 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/bikeindex/bike_index.git --path .claude/skills/production-log-inspection--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 bikeindex/bike_index --skill production-log-inspection -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bikeindex/bike_index production-log-inspection --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/production-log-inspection .gemini/skills/production-log-inspection && 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 "production-log-inspection" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspection into .gemini/skills/production-log-inspection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "production-log-inspection", 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 bikeindex/bike_index production-log-inspectionInstalls 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 bikeindex/bike_index --skill production-log-inspection -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/production-log-inspection .github/skills/production-log-inspection && 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 "production-log-inspection" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspection into .github/skills/production-log-inspection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "production-log-inspection", 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 bikeindex/bike_index --skill production-log-inspection -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bikeindex/bike_index production-log-inspection --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bikeindex/bike_index.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/production-log-inspection .opencode/skills/production-log-inspection && 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 "production-log-inspection" agent skill from https://github.com/bikeindex/bike_index/tree/main/.claude/skills/production-log-inspection into .opencode/skills/production-log-inspection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "production-log-inspection", 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.
production-log-inspectionInspect the Bike Index production Rails logs downloaded by binxlogs and streamed with binxcat web / binxcat worker — JSON-per-request (Lograge) on web plus free-form background-job lines on worker…
Production Log Inspection is an agent skill from bikeindex/bike_index. Inspect the Bike Index production Rails logs downloaded by binxlogs and streamed with binxcat web / binxcat worker — JSON-per-request (Lograge) on web plus free-form background-job lines on worker, far too large to read end-to-end. Trigger when the user asks to review, investigate, audit, or pull stats from a production log file (slow requests, error spikes, status-code distribution, exception stack traces, per-endpoint hit counts, suspicious traffic, failing background jobs). Also triggers when chasing a…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering Background jobs, Debugging and Backend development. It works with Ruby. The repository describes itself as: All the code for Bike Index, because we love you. The licence is AGPL-3.0.
Read from SKILL.md and the folder at commit 62d654e. 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:
rgjqmisegitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Production Log Inspection loads about 3.6k tokens when it runs. Until then it costs about 208 tokens; SKILL.md has 1,665 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 no risky patterns in SKILL.md.
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 bikeindex/bike_index at commit 62d654e, republished under its AGPL-3.0 licence (© bikeindex). 1,665 words, ~3,647 tokens.
.claude/skills/production-log-inspection/SKILL.md (or your agent's skills folder).binx_logs downloads production logs; binx_cat streams them. Both are personal scripts on PATH (~/bin), not repo bin/ entries, and both must be run from the repo root.
binx_logs # default: web AND worker, yesterday's archive + today's live log
binx_logs -d 7 # both servers, past week of archives
binx_logs web # web only
binx_cat web | rg '"status":5' # stream a server's logs, oldest lines first
binx_cat -l worker # list the files that would be streamedBoth need mise's Ruby ahead of the system one (undefined method 'filter_map' or a syntax error in ~/bin/binx_logs means /usr/bin/ruby 2.6 ran them) — prefix the command with PATH="$(dirname "$(mise which ruby)"):$PATH".
binx_logs refuses to run in a Conductor workspace — it has to download into the base checkout (git worktree list | head -1). If that checkout's tmp/ already holds a recent pull, search its files directly with rg -z -I rather than asking for a fresh download; binx_cat only reads the current checkout's tmp/.
binx_logs leaves the rotated archives gzipped on disk (tmp/<server>-production.log.<date>-<n>.gz) alongside today's still-rotating, uncompressed log (tmp/current-production-<server>.log). Always read them through binx_cat <server> — it decompresses the archives and concatenates everything in chronological order on the fly. Don't glob the files yourself, and don't build your own concatenated copy: a day of web logs is ~630 MB uncompressed, and decompression is cheap next to the search, so streaming is free.
Review both by default. A question framed around requests ("why are we 500ing") usually has half its answer in the worker log: the job that poisoned the cache, the Honeybadger client silently dropping error reports, a worker process crash-looping. Only skip a server when the user explicitly scopes to one.
Use rg, not grep. On a day of web logs rg is roughly 4× faster (a -o aggregation over 1.3M lines: 1.4s vs 5.5s). Flag translation is nearly one-to-one — grep -oE 'x' → rg -o 'x' (rg is always regex, so drop -E), -c/-n/-A/-B are the same, and -F still means literal. rg exits 1 on no matches, same as grep. Pass -M0 when a later step reads the whole line (a JSON parse, a params extraction): ~/.ripgreprc sets --max-columns=300, which cuts every Lograge line to a preview ending [... omitted end of long line].
Rules for both servers:
Read the logs, and never binx_cat without a filter. The web log is routinely several hundred MB. Always pipe into rg/awk/head/tail.Both servers share a syslog-style header: a severity letter (I/W/E), timestamp, and pid.
Web — Lograge JSON, one line per request, with a request-id prefix:
I, [2026-04-27T04:42:04.467657 #277641] INFO -- : [0591f694-…] {"method":"GET","path":"/search/registrations","format":"html","controller":"Search::RegistrationsController","action":"index","status":500,"allocations":1073409,"duration":51237.65,"view":0.0,"db":51234.09,"remote_ip":"71.212.12.114","u_id":148942,"params":{…},"@timestamp":"…","@version":"1","message":"…"}Key fields:
| Field | Notes |
|---|---|
duration, view, db | Milliseconds. A 60s query is 60000, not 60. |
status | HTTP status code |
controller, action, path | Routing info |
u_id | User id (null for anonymous) |
remote_ip | Forwarded client IP |
allocations | Ruby object allocations — high allocations + long duration is a strong signal of a bad query plan |
params | Object literal — may contain commas/colons; don't split lines on , |
When a request raises, you also get separate, non-JSON lines starting with [<request-id>] at column 0 (no syslog header) containing the exception class, message, and stack trace, followed by another JSON line for /500 (the ErrorsController#server_error render). That secondary /500 line inflates 500 counts — exclude "controller":"ErrorsController" when counting.
Worker — free-form. Only a trickle of Lograge lines (bots hitting the worker host by IP). The bulk is:
Requesting page 1, S3 Storage (56.1ms) Deleted files by key prefix: …)[SKYLIGHT] … Skylight agent enabled — one per process boot; a high count means workers are restarting a lotReporting error id=…, Success ⚡ …, and throttle warnings — see pitfalls)Scoped order is ignored, use :cursor with :order …)[<request-id>]-prefixed shape as webSince there's no fixed schema, search by message text, not by field.
Time range covered. binx_cat exits cleanly when head closes the pipe.
binx_cat web | head -1
binx_cat web | tail -1Status-code distribution.
binx_cat web | rg -o '"status":[0-9]+' | sort | uniq -c | sort -rnSlow requests over a threshold (in ms). Use awk rather than a regex — durations are floats with arbitrary digit counts and a pattern like "duration":[5-9][0-9]{4} will silently miss values:
binx_cat web | awk -F'"duration":' '$2 != "" {split($2,a,","); if (a[1]+0 > 60000) print}'Pipe that into rg -o '"path":"[^"]+"' | sort | uniq -c | sort -rn to group by path, or rg -o '"status":[0-9]+' for status mix.
Distribution stats (p50/p90/p99).
binx_cat web | awk -F'"duration":' '$2 != "" {split($2,a,","); print a[1]+0}' \
| sort -n \
| awk 'BEGIN{c=0}{v[c++]=$1; s+=$1} END{print "n="c, "p50="v[int(c*.5)], "p90="v[int(c*.9)], "p99="v[int(c*.99)], "max="v[c-1], "mean="s/c}'Most-hit endpoints.
binx_cat web | rg -o '"controller":"[^"]+","action":"[^"]+"' | sort | uniq -c | sort -rn | head -205xx counts by endpoint. Filter to "status":5 first to keep the line set small:
binx_cat web | rg '"status":5' \
| rg -o '"controller":"[^"]+","action":"[^"]+"' | sort | uniq -c | sort -rnSeveral stats at once. Each binx_cat re-reads the whole log, so when you want more than two or three cuts of the same data, spool once and reuse — the win is I/O, not decompression:
binx_cat web | rg '"status":5' > tmp/_5xx.log # small; delete when doneSeverity mix — cheap first pass; E, lines and [-prefixed backtrace lines are where the signal is:
binx_cat worker | awk '{print substr($0,1,1)}' | sort | uniq -c | sort -rnCluster the noise. Strip the header and the varying ids, then count — most of the file is a handful of repeated messages:
binx_cat worker \
| sed -E 's/^[IWE], \[[^]]+\] +[A-Z]+ -- //; s/id=[a-f0-9-]+//g; s/pid=[0-9]+//g' \
| cut -c1-90 | sort | uniq -c | sort -rn | head -15Exception classes.
binx_cat worker | rg -o '^\[[a-f0-9-]+\] [A-Z][A-Za-z]*(::[A-Za-z]+)+' \
| sed -E 's/^\[[a-f0-9-]+\] //' | sort | uniq -c | sort -rnHourly rate of any message — turns "this happens a lot" into "this started at 09:00":
binx_cat worker | rg 'reached max queue size' \
| rg -o '\[2026-[0-9-]+T[0-9]{2}' | sort | uniq -cWorker restarts (each boot logs the Skylight agent once):
binx_cat worker | rg -c 'Skylight agent enabled'Works the same on both servers. The JSON request line tells you a request 500'd but not why. Grab the request id from the JSON line, then search for that id — Rails writes the exception class and backtrace as separate lines with the same [request-id] prefix:
binx_cat web | rg -n '0591f694-49b4-4c9c-b49e-4fef89ae8d7b'Look for lines starting with E, (ERROR severity) and lines beginning [<id>] ActiveRecord::… / [<id>] ActionView::… / [<id>] Caused by: / [<id>] app/…:NN. The trailing app/… lines are the user-code frames (Rails strips gem frames by default).
To find clusters of the same exception, search for the exception class plus a line of context:
binx_cat worker | rg -A1 'ActionController::RoutingError' | head -40rg -z reads gzip and plain files alike, so it can search the archives and today's uncompressed log in one shot, in parallel across cores. It's modestly faster than streaming (1.1s vs 1.4s on one day; the gap widens with -d 7, where there are more archives to parallelize over). Two catches, so reach for it only on many-pass aggregations:
rg -z -I -o '"status":[0-9]+' $(binx_cat -l web) | sort | uniq -c | sort -rn-I (--no-filename) is mandatory. With more than one file rg prefixes each match with tmp/current-production-web.log:, which corrupts any sort | uniq -c.rg searches files in parallel and emits them as they finish — today's log routinely lands before yesterday's archive. Fine for counting; wrong for head -1, tail -1, timelines, or reading a trace in order. Use binx_cat for anything order-sensitive.Under rtk, wrap any pipeline that keeps whole lines in rtk proxy sh -c '…'. The hook rewrites rg into a filter that cuts each line at ~300 characters and writes [... omitted end of long line] into the output itself, so a spooled file loses u_id, params and everything after location for good. -o extractions of early fields survive, which hides it.
Sidekiq job lines are not in the worker log. Searching it for Sidekiq, TID-, Performing, or Enqueued returns nothing — it holds Rails-level output from worker processes, not Sidekiq's own job lifecycle log. Use Sidekiq's web UI or Honeybadger for per-job success/failure.
Honeybadger throttle warnings mean Honeybadger is under-counting. Unable to report error; reached max queue size of 100 and Error report failed: project is sending too many errors in the worker log mean error reports were dropped client-side. When these are firing, Honeybadger fault counts are a floor, not a total — trust the logs over the dashboard for that window, and treat the onset time of these warnings as the real start of the incident.
rg | sort | uniq on JSON fragments is fine for counting, but don't awk -F, or cut -d, on a whole line — params:{…} contains commas. Anchor splits to the field name (-F'"duration":').
rg has no -P — it's Rust regex, so no backreferences or lookaround; none of the patterns here need them.
The replication-conflict cancel error (PG::TRSerializationFailure: canceling statement due to conflict with recovery) means the replica killed the query because WAL recovery was blocked — it's a symptom of a slow query holding the replica too long, not a bug in the SQL itself. Look for the underlying duration to find the real cause.
Bots and scanners produce a lot of noise in 4xx and 5xx counts (path-traversal probes, .well-known/* lookups, npm CDN-style 404s). Nearly every request line in the worker log is a bot hitting the host's bare IP — ActionController::RoutingError (No route matches [POST] "/") there is noise, not a routing regression. Eyeball the path before treating an error spike as a real issue.
The Bash tool truncates long lines it displays with [... omitted end of long line]. The data itself is intact — redirecting to a file or piping onward preserves full lines — but a whole Lograge line printed to the transcript gets clipped at the end (@timestamp, @version, message). So don't eyeball trailing fields off a raw line; extract them with rg -o '<trailing-field>' so the short match is what's displayed.
One scanner IP can dominate counts. A single bot can rack up tens of thousands of 4xx/5xx and make a real user-facing issue look bigger than it is. Always check "remote_ip" distribution before treating an error spike as a real signal — group by IP first, then re-run analyses excluding the dominant scanner.
Archives outside the requested window are deleted on each binx_logs run, so binx_cat can't stream a stale day from an earlier pull. If you need more history, re-run with -d N rather than hoarding files.
jq is and isn't worth itThe web log's lines are JSON, so jq is tempting — but you have to strip the syslog prefix first, and on a full-day log it's noticeably slower than rg/awk. Use jq when you need to group by two or more JSON fields at once, or when params/payload structure matters; otherwise the awk -F'"key":' patterns above are faster. It's rarely useful on the worker log, which is mostly not JSON.
# strip prefix, then jq — only worth it for multi-field aggregations
binx_cat web | sed -E 's/^[^{]+//' \
| jq -r 'select(.status==500) | "\(.controller)#\(.action)\t\(.duration)"' \
| sort | uniq -c | sort -rn | head"What's currently broken in production" and "is exception X happening more this week" are Honeybadger questions — read it with bin/binx_hb (faults, fault, notice, trend, counts), not the MCP. This skill is for requests that didn't raise: slow successful queries, traffic patterns, status-code mix.
© bikeindex, AGPL-3.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 .claude/skills/production-log-inspection of bikeindex/bike_index.
Open the folder on GitHubat commit 62d654e
Production Log Inspection 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 |
|---|---|---|---|---|---|---|
| Production Log Inspection this skillbikeindex/bike_index | 308 | — | ~3.6k | Automated safety check: Pass | AGPL-3.0 | |
| Temporal Developertemporalio/skill-temporal-developer | 230 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Rails ExpertJeffallan/claude-skills | 12k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Rails Patternsaffaan-m/ECC | 276k | — | ~4.1k | Automated safety check: Pass | MIT | |
| Gumroad Prod Consoleantiwork/gumroad | 9.8k | — | ~2.9k | Automated safety check: Notes | MIT | |
| Antipattern Preventiondoorkeeper-gem/doorkeeper | 5.5k | — | ~1.1k | Automated safety check: Pass | MIT |
temporalio/skill-temporal-developer
Develop, debug, and manage Temporal applications across Python, TypeScript, Go, Java, .NET, Ruby, and Rust.
Jeffallan/claude-skills
Builds Rails 7+ apps with Hotwire Turbo Frames and Streams, Active Record tuning, Action Cable, Sidekiq jobs and RSpec specs, with migration and N+1 checks.
affaan-m/ECC
Ruby on Rails framework patterns for Rails 7.1+ and 8.x apps.
antiwork/gumroad
Execute read-only Ruby/Rails commands against Gumroad's production database for debugging and investigation.
doorkeeper-gem/doorkeeper
Avoid common Ruby and Rails antipatterns that degrade maintainability and performance.
Jeffallan/claude-skills
Builds Laravel 10+ applications with Eloquent models, Sanctum authentication, Horizon queues, API resources and Livewire components, tested with Pest or PHPUnit.
bikeindex/bike_index
Read live production data from Bike Index through the admin OAuth token — Sidekiq and PgHero status, and the user-submitted bug reports — the same data as the cookie-gated dashboards, but…
bikeindex/bike_index
Embed a local image file into an existing GitHub PR — either in the PR body or as a comment.
bikeindex/bike_index
Add a manufacturer to Bike Index in production through the admin OAuth token (POST /admin/manufacturers).
bikeindex/bike_index
Create or update a pull request for the current branch. An agent skill from bikeindex/bike_index.
bikeindex/bike_index
How to fix a test that fails intermittently in Bike Index — one that passes locally but fails on CI, fails on one shard, passes on re-run, or is already tagged :flaky.
bikeindex/bike_index
Investigate and fix a specific Honeybadger exception in the Bike Index app — pull the fault, read its backtrace, find the offending code, write the fix.
Works with
Categories
Inspect the Bike Index production Rails logs downloaded by binxlogs and streamed with binxcat web / binxcat worker — JSON-per-request (Lograge) on web plus free-form background-job lines on worker…. Production Log Inspection is an agent skill from bikeindex/bike_index. Inspect the Bike Index production Rails logs downloaded by binxlogs and streamed with binxcat web / binxcat worker — JSON-per-request (Lograge) on web plus free-form background-job lines on worker, far too large to read end-to-end.
Production Log Inspection fits situations like: the user asks to review; pull stats from a production log file (slow requests; status-code distribution; exception stack traces.
Run `npx skills add bikeindex/bike_index --skill production-log-inspection -a claude-code`. Or copy the skill folder (.claude/skills/production-log-inspection in bikeindex/bike_index) into .claude/skills/production-log-inspection in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bikeindex/bike_index --skill production-log-inspection -a codex`. Or copy the skill folder (.claude/skills/production-log-inspection in bikeindex/bike_index) into .agents/skills/production-log-inspection 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 bikeindex/bike_index --skill production-log-inspection -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/production-log-inspection, .gemini/skills/production-log-inspection, .github/skills/production-log-inspection and .opencode/skills/production-log-inspection in your project.
Going by SKILL.md and its folder, Production Log Inspection needs the command-line tools its instructions call (rg, jq, mise and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Production Log Inspection is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 15k 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 Production Log Inspection: Temporal Developer (temporalio/skill-temporal-developer, 230 stars), Rails Expert (Jeffallan/claude-skills, 12k stars), Rails Patterns (affaan-m/ECC, 276k stars) and Gumroad Prod Console (antiwork/gumroad, 9.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bikeindex (a GitHub organization) maintains it in bikeindex/bike_index, which has 308 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 11, 2026.
Source: bikeindex/bike_index on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.