file-search-on: Skill for Claude Code

.claude/skills/add-content-type/SKILL.md

add-content-type is a skill for Claude Code from richardwooding/file-search-on. It costs 163 tokens per session (1,870 once invoked), scanned A, original, MIT.

A development guide for registering a new file format in the file-search-on server. A content type tells the server how to recognize and describe files such as CSV, JSON, or images.

In plain words
What is it for?
Use it when adding support for a new file format, including its detection rules, metadata fields, registration code, and any image-specific handling.
Why use it?
It explains the required code, automatic registration, file-extension and binary-signature detection, and the extra schema work needed for custom file attributes.

Skill for Claude Code

Written for Claude Code: installed under .claude/. Also seen: reads .claude/ paths.

This is richardwooding/file-search-on's own configuration. It tells Claude Code how to work on file-search-on 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 file-search-on configures →

Reuse

Borrowing it

Nothing to install: this file belongs to richardwooding/file-search-on. 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/richardwooding/file-search-on/main/.claude/skills/add-content-type/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/richardwooding/file-search-on

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 add-content-type

README.md
[![agentmods](https://agentmods.dev/badge/skills/richardwooding/file-search-on/add-content-type/github.svg)](https://agentmods.dev/skills/richardwooding/file-search-on/add-content-type)
Your own site
<a href="https://agentmods.dev/skills/richardwooding/file-search-on/add-content-type"><img src="https://agentmods.dev/badge/skills/richardwooding/file-search-on/add-content-type/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 add-content-type

Your own site · 80×15
<a href="https://agentmods.dev/skills/richardwooding/file-search-on/add-content-type"><img src="https://agentmods.dev/badge/skills/richardwooding/file-search-on/add-content-type.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 163 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,870 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. 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.00163 $0.01870
Opus 5 $0.00081 $0.00935
Sonnet 5 $0.00033 $0.00374
Haiku 4.5 $0.00016 $0.00187

Measured 12d ago against content hash 46dadcaa320f, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

add-content-type scanned grade A with 0 findings 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 12d 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.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/add-content-type/SKILL.md · 90 lines

How it starts

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

Add Content Type

A "content type" is anything Detect() can identify and Walk can tag. Registering one is mostly mechanical: drop a file in internal/content/, implement four methods, register it, done. The wrinkle is the Attributes(ctx, fsys, path) method — if it returns any type-specific keys, you also need the extend-cel-schema workflow to make those keys CEL-visible.

What gets registered

A type is identified by its Name() (e.g. "json", "image/png") and detected by either:

  • Extension match.json, .md, etc. Tried first.
  • Magic-byte prefix — first 512 bytes of the file. Used as a fallback when the extension doesn't match.

Either or both can be empty (extension-only or magic-only types are valid). Registration is a side-effect of init() calling content.Register(...) — there is no central list to edit.

Quick start (non-image, no attributes)

For a type like CSV that you want detected but where you don't (yet) care about per-file attributes:

  1. Copy the template:
    cp .claude/skills/add-content-type/templates/content_type.go.tmpl internal/content/csv.go
    
  2. Fill in csv.go: replace <typename>, <TypeName>, <name>, <.ext>, magic bytes (or nil).
  3. Implement Attributes — for now, just return Attributes{}, nil.
  4. Run go build ./... and go test ./... — no test edits required for a no-attribute type.
  5. Run go run ./cmd/file-search-on --list — your new type appears under "Registered content types".

Quick start (with attributes)

If Attributes(ctx, fsys, path) returns type-specific keys (e.g. csv_columns, csv_rows):

  1. Steps 1–3 as above, but make Attributes return the keys.
  2. Then run the extend-cel-schema skill for each new key — declare the CEL variable, add to the activation defaults, add a switch case, and document in Schema().
  3. Run python .claude/skills/extend-cel-schema/scripts/audit_attributes.py — must pass.
  4. Run go test ./....
  5. Add a unit test in internal/content/csv_test.go exercising the new type.

Read the full file on GitHub · 90 lines

Files

What ships with it

2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

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. 12d ago First seen · 90 lines · 163 tokens per session scan A 46dadcaa320f

Subscribe to this mod's changes

add-content-type is a skill published in the GitHub repository richardwooding/file-search-on (5 stars, last pushed 3d ago), licensed MIT. It adds 163 tokens to every session and 1,870 once invoked, about $0.0008 per session on Opus 5. A static security scan graded it A with 0 findings. 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

go

Use when writing, reviewing, testing, or shipping Go code and HTTP services: idioms, %w error wrapping, goroutine/context/errgroup concurrency, net/http 1.22 routing, log/slog, project layout, table-driven tests, Go hardening. NOT language-agnostic threat modeling (that is secure-coding), NOT Dockerfile/CI shipping…

ericrisco/rsc-harness · 86 tokens

go-docs

Go 1.26 — language specification, standard library, concurrency, modules, tools, testing, crypto, networking, database access, and idiomatic patterns.

pledgeandgrow/pledge-skills · 36 tokens

golang-samber-do

Dependency injection in Golang using samber/do — service containers, lifecycle management, scopes, health checks, graceful shutdown, and module organization. Apply when using or adopting samber/do, when the codebase imports github.com/samber/do or github.com/samber/do/v2, or when refactoring manual constructor…

alexastrum/skl · 74 tokens

cartograph-use-case

Compile use-case trees into docs/hops.md: Input → Branches → Output. Use when hops.md is missing or stale, the user asks to map a flow, an event is a different use case, or traces break across async calls.

jeunessegamesee/clew · 54 tokens

go

Use when writing Go/Golang code — goroutines/channels concurrency, net/http web servers, database/sql, generics (1.18+), module management, testing and benchmarking. Go: the language powering Docker, Kubernetes, and cloud-native infrastructure.

znlgis/opengis-skills · 53 tokens

golang-grpc

Provides gRPC usage guidelines, protobuf organization, and production-ready patterns for Golang microservices. Use when implementing, reviewing, or debugging gRPC servers/clients, writing proto files, setting up interceptors, handling gRPC errors with status codes, configuring TLS/mTLS, testing with bufconn, or…

alexastrum/skl · 72 tokens