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 nifrajs/nifra --skill nifra-apigit clone --depth 1 https://github.com/nifrajs/nifraWrote 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/nifrajs/nifra/nifra-api)<a href="https://agentmods.dev/skills/nifrajs/nifra/nifra-api"><img src="https://agentmods.dev/badge/skills/nifrajs/nifra/nifra-api.svg" alt="Measured on agentmods" 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.00073 | $0.01133 |
| Opus 5 | $0.00036 | $0.00566 |
| Sonnet 5 | $0.00015 | $0.00227 |
| Haiku 4.5 | $0.00007 | $0.00113 |
Grade A, and why
nifra-api scanned grade A 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 8d 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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
The app is `app.fetch(Request): Promise<Response>`. Bun is first-class; Node How it starts
The opening of the file, as written. The whole thing — 98 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Nifra: typed APIs and the typed client
Fetch exact signatures with nifra_types and compiling snippets with nifra_example before writing
anything non-trivial. This skill is the shape of the thing, not a substitute for either.
Two ways to declare routes
server() - chainable, inference-first. Reach for this by default.
import { server } from "@nifrajs/core/server"
import { t } from "@nifrajs/schema"
export const app = server()
.get("/notes", () => listNotes())
.get("/notes/:id", { params: t.object({ id: t.string() }) }, (c) => getNote(c.params.id))
.post("/notes", { body: t.object({ title: t.string(), body: t.string() }) }, (c) =>
createNote(c.body),
)
defineContract - the same routes as a standalone, versionable artifact when the contract must
be published, shared across repos, or evolved independently of the handlers. Ask nifra_docs for
the contract page before choosing it; do not reach for it just because a route feels important.
Validation belongs in the route options
body, query, params, headers, and response all take a schema. Anything that fails becomes a
structured 422 before your handler runs, so a handler never defensively re-checks its own input.
@nifrajs/schema (t) is TypeBox-backed and gives you JSON Schema and OpenAPI for free. Any
Standard Schema library works too - Zod and Valibot slot into the same
option with no adapter.
import { z } from "zod"
app.post("/users", { body: z.object({ email: z.string().email() }) }, (c) => c.body.email)
Typed search params: declare query and read c.query typed. Do not parse new URL(c.req.url) by
hand.
The client never throws
const res = await api.notes({ id }).get()
if (!res.ok) return handle(res.error) // transport and HTTP failures both land here
res.data // typed from the route's return type
Three consequences worth internalising:
- No
try/catcharound a client call for HTTP or network failure. Only genuinely exceptional code throws. - The client is browser-safe. It carries the server's types, never its code.
- Changing a route's shape breaks every caller at compile time. That is the feature. Fix the callers;
do not widen the type to silence
tsc.
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.
- 8d ago First seen · 98 lines · 73 tokens per session scan A c5c19c0e7464
nifra-api is a skill published in the GitHub repository nifrajs/nifra (2 stars, last pushed 5d ago), licensed MIT. It adds 73 tokens to every session and 1,133 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
scaffold-ai-app
Scaffold a Veryfront app with AI tools, agent definitions, and knowledge base.
stitchkit
Build or change a backend with stitchkit — the contract-first framework where one defineContract() becomes an HTTP API, MCP tools, AI-agent tools, a CLI and a typed client. Use this whenever working in a project that depends on stitchkit: defining or editing a contract, implementing handlers, exposing endpoints as MCP…
verify
Check a completed change with the project's own Bun scripts before reporting success.
groq-inference
Ultra-fast LLM inference on custom LPU hardware. OpenAI-compatible API at api.groq.com. Lowest latency in the industry (500-1000+ tok/s). Supports chat completions, vision, audio (Whisper STT + TTS), tool calling, JSON mode, and streaming. Free tier available. Inference only — no training.
horse-database-pooling
Guide for setting up thread-safe database connection pooling (FireDAC / UniDAC) in multithreaded Horse applications.
horse-mvc-architecture
Guide for structuring corporate Horse applications using Clean MVC (Model-View-Controller) principles and decoupling HTTP layers from business logic.