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 jkaninda/okapi-skills --skill http_clientgit clone --depth 1 https://github.com/jkaninda/okapi-skillsWrote 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/jkaninda/okapi-skills/http_client)<a href="https://agentmods.dev/skills/jkaninda/okapi-skills/http_client"><img src="https://agentmods.dev/badge/skills/jkaninda/okapi-skills/http_client/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/jkaninda/okapi-skills/http_client"><img src="https://agentmods.dev/badge/skills/jkaninda/okapi-skills/http_client.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.00000 | $0.01697 |
| Opus 5.5 | $0.00000 | $0.00679 |
| Sonnet 5.5 | $0.00000 | $0.00339 |
| Haiku 4.5 | $0.00000 | $0.00170 |
Grade A, and why
http_client 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 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.
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 — 215 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Okapi HTTP Client (okapi/client package)
github.com/jkaninda/okapi/client is a small fluent HTTP client with:
- A request builder per verb
- Default + per-request middleware chain
- Built-in retry policy with exponential backoff
- Body encoders for JSON, XML, YAML, form, multipart, raw
- Response decoders driven by
Content-Type - Zero dependency on the Okapi server package — usable against any REST API
Quick Start
import "github.com/jkaninda/okapi/client"
c := client.New("https://api.example.com",
client.WithBearerToken(token),
client.WithUserAgent("my-app/1.0"),
client.WithTimeout(10*time.Second),
)
var user User
resp, err := c.Get("/users/42").
WithContext(ctx).
QueryParam("expand", "profile").
Do()
if err != nil { return err }
if err := resp.Error(); err != nil { return err } // *client.HTTPError on non-2xx
if err := resp.JSON(&user); err != nil { return err }
Do() and Send() are aliases. For the common "do, decode, fail on non-2xx" path use Decode:
var user User
err := c.Get("/users/42").Decode(&user)
Decode chooses JSON / XML / YAML based on the response Content-Type.
Client Options
| Option | Purpose |
|---|---|
WithHTTPClient(*http.Client) |
Provide a pre-configured http.Client (TLS, transport) |
WithTimeout(d) |
Default per-request timeout |
WithHeader(k, v) |
Add one default header |
WithHeaders(map) |
Merge multiple default headers |
WithBearerToken(token) |
Sets Authorization: Bearer <token> |
WithBasicAuth(u, p) |
Sets Authorization: Basic ... |
WithUserAgent(ua) |
Sets the default User-Agent |
WithMiddleware(mw...) |
Append middleware to the chain |
WithRetry(policy) |
Default retry policy |
Request Builder
Each verb returns a *RequestBuilder:
resp, err := c.Post("/items").
WithContext(ctx).
Header("X-Trace-Id", traceID).
QueryParam("dry_run", "true").
JSONBody(Item{Title: "hello"}).
Timeout(5*time.Second).
Do()
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.
- 1mo ago First seen · 215 lines · 0 tokens per session scan A 5303ff645ea0
http_client is a skill published in the GitHub repository jkaninda/okapi-skills (3 stars, last pushed 2mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,697 tokens. 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.
Other skills, from other repositories
telnyx-numbers-go
Search, order, and manage phone numbers by location, features, and coverage.
af-xdp
AFXDP skill for high-performance XDP sockets. Use when creating AFXDP sockets, configuring UMEM and XSK rings, XDPREDIRECT programs, copy vs zero-copy mode, or comparing with DPDK. Activates on queries about AFXDP, xskumem, XDPREDIRECT, libbpf xsk, or zero-copy XDP.
go-services
Build Go HTTP services with contextual cancellation, middleware, tests, and compact deployable binaries.
telnyx-messaging-go
Send and receive SMS/MMS, handle opt-outs and delivery webhooks. Use for notifications, 2FA, or messaging apps.
telnyx-porting-out-go
Manage port-out requests when numbers are being ported away from Telnyx. List, view, and update port-out status. This skill provides Go SDK examples.
telnyx-account-go
Manage account balance, payments, invoices, webhooks, and view audit logs and detail records. This skill provides Go SDK examples.