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 saski/arnesto --skill thin-wrappersgit clone --depth 1 https://github.com/saski/arnestoWrote 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/saski/arnesto/thin-wrappers)<a href="https://agentmods.dev/skills/saski/arnesto/thin-wrappers"><img src="https://agentmods.dev/badge/skills/saski/arnesto/thin-wrappers.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.00037 | $0.00857 |
| Opus 5 | $0.00018 | $0.00428 |
| Sonnet 5 | $0.00007 | $0.00171 |
| Haiku 4.5 | $0.00004 | $0.00086 |
Grade A, and why
thin-wrappers 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 3d 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 — 113 lines — stays where its author put it; the contents beside it link to each section on GitHub.
STARTER_CHARACTER = 🏗️
Thin Infrastructure Wrappers
Core Principle
Minimize the API surface area: expose only what you use today, in your domain's language. The wrapper should be significantly smaller than the SDK it wraps.
When to Apply
Apply thin wrappers when:
- Direct SDK usage spreads across the codebase
- Infrastructure concerns leak into business logic
- Testing requires mocking third-party libraries directly
- Switching providers or versions creates ripple effects
- SDK types and concepts appear in domain code
Skip when:
- The SDK is already minimal and domain-aligned
- Usage is isolated to a single boundary class
- The abstraction cost exceeds the coupling cost
Design Process
1. Identify Usage Patterns
Analyze existing SDK usage across the codebase:
- Find all import statements for the SDK
- Catalog which SDK methods are actually used
- Group usage by purpose (read, write, delete, etc.)
- Apply the 80% rule: focus on covering the most common operations first
2. Design Minimal Interface
Create an interface exposing only what's needed:
- Use domain terminology, not SDK terminology
- Expose operations, not SDK objects or types
- Keep method signatures simple and focused
- Prevent SDK types from escaping the wrapper
Anti-pattern: Exposing entire SDK "just in case"
Example transformation:
- SDK:
cache.set(key, value, ex=ttl, nx=True) - Wrapper:
cache.set_if_not_exists(key, value, ttl)
3. Choose Implementation Pattern
Two-layer approach (most common):
- Thin wrapper: Direct SDK encapsulation, minimal logic
- Domain class: Business logic using the wrapper
Use when business logic needs to be separated from infrastructure.
Single-class approach:
- Combine wrapper and domain logic in one class
Use when wrapper logic is minimal and business logic is simple.
4. Implement with Domain Language
Align method names and parameters with domain concepts:
publish_order_created(order_id, customer_id)notpublish(topic, message)fetch_user_profile(user_id)notget(bucket, key)store_uploaded_file(file_id, content)notput_object(params)
What ships with it
3 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.
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.
- 3d ago First seen · 113 lines · 37 tokens per session scan A 273f3d47b02a
thin-wrappers is a skill published in the GitHub repository saski/arnesto (5 stars, last pushed today), licensed Unlicense. It adds 37 tokens to every session and 857 once invoked, about $0.0002 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-09-03.
Other skills, from other repositories
deepstream-sop
Use this skill when building, deploying, evaluating, debugging, or measuring latency for the DeepStream SOP Inference Microservice — a GPU-accelerated FastAPI service that detects whether operators perform assembly-line steps in order via event boundary detection (GEBD) plus VLM classification. Trigger even if the…
nemo-fabric-build-adapter
Build, migrate, review, and maintain third-party NVIDIA NeMo Fabric adapters against the public adapter contract. Use when creating adapter or target descriptors, mapping AgentConfig into an agent harness or custom-agent runtime, implementing start/invoke/stop, declaring schemas and capabilities, packaging discovery…
earth2studio-create-datasource
Create and validate Earth2Studio data source wrappers (DataSource, ForecastSource, DataFrameSource, ForecastFrameSource) from remote stores. Do NOT use for fetching data with existing sources, model inference, or installation tasks.
dynamo-recipe-runner
Select, validate, patch, and deploy existing NVIDIA Dynamo Kubernetes recipes. Use for model/backend/GPU/deployment-mode recipe bring-up; use router-starter for router-only mode work and troubleshoot for broken deployments.
cuopt-server-api-python
This skill covers starting the server and client examples (curl, Python). Server has no separate C API (clients can be any language).
dynamo-router-starter
Start or patch Dynamo router modes and run router endpoint smoke checks. Use for round-robin, KV-aware, least-loaded, or device-aware routing setup; use recipe-runner for recipe deployment and troubleshoot for failure diagnosis.