Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add romshark/datapages --skill datapages-pagesgit clone --depth 1 https://github.com/romshark/datapagesWrote 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.
[](https://agentmods.dev/skills/romshark/datapages/datapages-pages)<a href="https://agentmods.dev/skills/romshark/datapages/datapages-pages"><img src="https://agentmods.dev/badge/skills/romshark/datapages/datapages-pages/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.
<a href="https://agentmods.dev/skills/romshark/datapages/datapages-pages"><img src="https://agentmods.dev/badge/skills/romshark/datapages/datapages-pages.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00042 | $0.01575 |
| Opus 5.5 | $0.00017 | $0.00630 |
| Sonnet 5.5 | $0.00008 | $0.00315 |
| Haiku 4.5 | $0.00004 | $0.00158 |
Grade A, and why
datapages-pages 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 yesterday.
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.
How it starts
The opening of the file, as written. The whole thing — 144 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Pages
Read datapages first for the build loop, hard rules and naming conventions.
Define 1 struct, 1 route doc comment and 1 GET method for each page. PageIndex for / is required. App *App is the only named field a page may declare. Put dependencies on App.
// PageIndex is /
type PageIndex struct{ App *App }
func (PageIndex) GET(r *http.Request) (body datapages.Component, err error) {
return indexPage(), nil
}
Routes use net/http.ServeMux patterns. /item/{id} captures 1 segment. /{path...} captures the remaining path. /{$} matches only that path. Datapages serves a page's SSE stream below _$. Do not define a route that claims that path. A page whose route ends in {$} or {name...} serves only GET: it cannot have actions or an SSE stream. Leave out {$} to give a page actions or a stream: the page keeps its URL.
If a route comment has a description, separate it from the route with a blank // line:
// PageItem is /item/{id}
//
// Shows 1 item.
GET parameters
r *http.Request is required. A GET may also take Session, Path, Query, Signals, datapages.PageCacheWriter and dispatchers. It cannot take datapages.SSE, datapages.State[T] or stateID. See datapages-actions for the parameter types and datapages-offline for pageCache.
GET return values
(body datapages.Component, err error) is the minimum. Add what you need, matched by type:
| type | effect |
|---|---|
datapages.Component |
the body |
datapages.Head |
extra <head> content for this page |
datapages.Redirect |
{URL, Status}, sent instead of the body |
datapages.NewSession[Data] |
opens a session |
datapages.CloseSession |
ends the session |
datapages.EnableBackgroundStreaming |
keep the stream open while the tab is hidden; only a page with a stream may return it |
datapages.DisableRefreshAfterHidden |
no refresh when the tab is shown again; only a page with a stream may return it |
error |
reports an error |
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.
- yesterday Changed · -2 lines ad9b87955ef3
- 3d ago Changed e650abede18d
- 4d ago Changed 0bfdcc6ea04d
- 5d ago Changed · +3 lines f295fd84cf86
- 12d ago Changed c51b048f9101
- 13d ago Changed · +2 lines 6c5e492e654b
- 20d ago Changed · +2 lines c85bf8ab9e08
- 24d ago Changed · +7 lines bb50d329214d
- 25d ago Changed 2274ba38b69a
- 26d ago First seen · 132 lines · 42 tokens per session scan A 751d626ee62b
datapages-pages is a skill published in the GitHub repository romshark/datapages (114 stars, last pushed yesterday), licensed MIT. It adds 42 tokens to every session and 1,575 once invoked, about $0.0002 per session on Opus 5.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-09-20.
Other skills, from other repositories
structpages
Guide for building Go web applications with the structpages framework (struct-based routing + gsx + HTMX). Use when writing routes, pages, page groups, Props methods, handler methods (ServeHTTP), page components, partials, HTMX partial rendering and nested swap levels, URL and element-id generation (the gsx…
pinchtab
Use this skill when a task needs browser automation through PinchTab: open a website, inspect interactive elements, click through flows, fill out forms, scrape page text, reuse a dedicated automation profile with user approval, export screenshots or PDFs, manage multiple browser instances, or fall back to the HTTP API…
printing-press-amend
Amend a published CLI from one of two input sources: (1) dogfood mode mines the active Claude Code session transcript for friction (missing flags, hand- rolled API payloads, silent-null returns); (2) direct-input mode accepts user-supplied asks (rename a command, add commands or feeds, fix a named bug, optionally…
golang-graphql
Implements GraphQL APIs in Golang using gqlgen or graphql-go. Apply when building GraphQL servers, designing schemas, writing resolvers, handling subscriptions, or integrating GraphQL with existing Go HTTP services. Also apply when the codebase imports github.com/99designs/gqlgen or github.com/graph-gophers/graphql-go.
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…
golang-swagger
Golang OpenAPI/Swagger documentation with swaggo/swag — annotation comments (@Summary, @Param, @Success, @Router, @Security), swag init code generation, framework integrations (gin, echo, fiber, chi, net/http), security definitions (Bearer/JWT, OAuth2, API key), and struct tags (swaggertype, enums, example…