api-client

A required pattern for building Go clients that call HTTP APIs, manage connections, consume streams, or transform data on the client side.

In plain words
What is it for?
Use it when implementing API clients, connection pools, streaming consumers, or client-side transforms, including configuration, authentication, JSON requests, and typed CRUD methods.
Why use it?
It keeps network code typed, configurable, reusable, and consistent instead of scattering raw HTTP calls through application workflows.

Skill for Claude CodeCodex

Install

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.

agentmods
npx agentmods add skills/eslider/2dph/api-client
Any agent
npx skills add eSlider/2dph --skill api-client
Clone the repo
git clone --depth 1 https://github.com/eSlider/2dph

Made for: Claude Code, Codex.

Per session 0 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,053 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
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 $0.00000 $0.01053
Opus 5 $0.00000 $0.00526
Sonnet 5 $0.00000 $0.00211
Haiku 4.5 $0.00000 $0.00105

Measured yesterday against content hash 98bb0e4706e3, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

api-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 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.

skills/api-client/SKILL.md · 114 lines

How it starts

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

Skill: api-client — canonical Go API client pattern

Use when implementing ANY HTTP/API client, connection pool, streaming consumer, or client-side data transform in Go. Mandatory before writing such code (AGENTS.md, code standard #4).

First-class example: https://github.com/eSlider/go-ollama (client.go). Typed CRUD reference: go-onlyoffice tasks.go (CreateProjectTask, UpdateProjectTask, GetTasks).

go-onlyoffice split (AGENTS.md, #81): primitives live in the lib — one typed client method per OO API call (CreatePerson, AddHistoryNote, BuildContactEmailIndex, …). Flows (reconcile, interaction import) live in 2dph bin/onlyoffice/* and only orchestrate those primitives. Never inline raw OO calls in 2dph; add the capability in go-onlyoffice first.

Shape (mandatory)

  1. type Client struct { hc *http.Client; cfg Config } — one handle; state concurrency expectations in the doc comment.
  2. Typed Config/DSN struct (URL, token, timeouts) resolved from the go-config stack (etc/brain/config.yml → local → .env → env). Never hardcoded URLs/tokens; nil-safe constructor New(cfg *Config) *Client.
  3. One transport core on receiver:
    • doJSON(ctx, method, path, body, dest): sets headers/auth, non-2xx → wrapped error incl. body snippet, decodes into typed dest;
    • doStream(ctx, …): NDJSON/SSE variant with onItem func(T) error. Public methods stay thin: func (c *Client) X(ctx context.Context, req XRequest) (*XResponse, error).
  4. Per endpoint: {Name}Request / {Name}Response structs. Optional fields = pointers + omitempty; wire quirks get custom MarshalJSON. No map[string]any in or out; platform payloads convert at the boundary via mapstructure/v2 (WeakDecode pattern).
  5. Errors: fmt.Errorf("context: %w", err); typed sentinel errors where callers branch.

Concurrency (hard rules)

  • Public API synchronous; channels internal only, never in signatures.
  • ctx first param everywhere; every send/receive selects on <-ctx.Done(); workers exit on cancel — zero leaked or stuck goroutines (wg-accounted).
  • Bounded parallelism: worker pool caps in-flight calls (rate limiting).
  • Sender closes channels. Errors ride inside Result{val, err} or return synchronously — never ignored.
  • Fan-out/fan-in to merge multi-source fetches; errgroup.WithContext when first-error-cancel fits.

Read the full file on GitHub · 114 lines

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. yesterday First seen · 114 lines · 0 tokens per session scan A 98bb0e4706e3

Subscribe to this mod's changes

api-client is a skill published in the GitHub repository eSlider/2dph (2 stars, last pushed 2d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,053 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.

Related

Other skills, from other repositories

engrama-onboard

Build a personalized Engrama memory graph for any user through a conversational interview. Use this skill whenever someone says "set up Engrama", "create my graph", "onboard", "build my profile", "configure Engrama for me", or asks how to start using Engrama. Also use when the user mentions they have a different role…

scops/engrama · 104 tokens

life-memory-mcp-connect

Set up an external AI agent to connect to the Life Memory System through MCP, including verified installation, retrieval, RawEvent writes, sync, diagnostics, and Working-Agent governance. Use when an agent needs to install or verify the Life Memory MCP bridge, onboard Codex/Claude/Cursor/Windsurf style clients, or…

234194027-cpu/aion-memory-nexus · 75 tokens

life-memory-media-ingestion

Teach an external agent how to send links, files, images, tables, audio, and video into the Life Memory System as reviewable media note artifacts through MCP.

234194027-cpu/aion-memory-nexus · 39 tokens

fortemi-roadmap-skill

Advance the Fortemi delivery roadmap by one concrete increment and document the progress. Reads .aiwg/planning/roadmap.md, picks the next actionable item respecting phase gating, does or dispatches the work, then records progress back into the roadmap. Built for fresh sessions and simple loops.

Fortemi/fortemi · 65 tokens

fortemi-monthly-report

Author a Fortémi monthly report as a docsite blog post — gather what shipped that month from git history, CHANGELOG, and release announcements, then write it up FOR USERS in plain language and publish it to the Pagenary blog collection.

Fortemi/fortemi · 56 tokens

graph-mutation-plan

Cookbook for composing an applygraphmutations plan — stable entitykey patterns, the canonical label/edge vocabulary, evidence/invalidation/confidence discipline, and a worked example. Load this when building a non-trivial mutation plan.

potpie-ai/potpie · 51 tokens