From 46abae0026cb49b5245ef8728c18a460650350a7 Mon Sep 17 00:00:00 2001 From: goduni <37146584+goduni@users.noreply.github.com> Date: Fri, 7 Aug 2026 17:02:54 +0000 Subject: [PATCH 1/2] docs: point at unihttp's agent skills as an alternative The generator is not the only way to get a unihttp client: unihttp ships `unihttp-client`, an agent skill that scaffolds the same kind of packaged, typed client from an OpenAPI spec or from a plain description of the API, plus a `unihttp` skill for idiomatic hand-written code. Neither was mentioned here. Add a short section linking to the repository and its Agent Skills section, with the plugin install commands and a note on which of the two paths to pick: the generator for determinism, regeneration, and specs larger than an agent's context; the skill when there is no machine-readable spec at all. --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index dcda0d5..1e8d803 100644 --- a/README.md +++ b/README.md @@ -457,6 +457,25 @@ uv add --dev unihttp-openapi-generator - Swagger / OpenAPI 2.0 is not supported (use the OpenAPI 3 description if a service publishes both, as Kubernetes does). +## Without a spec — unihttp's agent skills + +[unihttp](https://github.com/goduni/unihttp) ships +[agent skills](https://github.com/goduni/unihttp#agent-skills) that let a coding agent +(Claude Code, Codex, …) write the client instead. `unihttp-client` scaffolds the same +kind of packaged, typed client — models, request classes, a client, `ruff`/`mypy` +config, and tests — from an OpenAPI 3.x spec **or from a plain description of the API**; +`unihttp` teaches the agent to write idiomatic unihttp code by hand. + +```bash +claude plugin marketplace add goduni/unihttp +claude plugin install unihttp@unihttp +``` + +Which to use: this generator is deterministic and regenerable — the same spec always +produces the same package, and it swallows specs far larger than an agent's context. +Reach for the skill when there is no machine-readable spec at all, or when you want a +small client shaped by hand as it is written. + ## Development ```bash From 4da29e6abe255eb272433cd22741cab0e5c3c16b Mon Sep 17 00:00:00 2001 From: goduni <37146584+goduni@users.noreply.github.com> Date: Fri, 7 Aug 2026 17:10:22 +0000 Subject: [PATCH 2/2] docs: add a table of contents, lift the skills section up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The README had grown past a screenful of top-level sections with no map at the top, and the agent-skills note landed at the very bottom — past Limitations, where nobody choosing how to get a client would look. Add a Table of Contents (h2 and h3, mirroring the style of unihttp's own README) and move the skills section directly under Quick start, so the two ways to get a client sit next to each other. Retitle it "Alternative: the unihttp agent skills" to read as a TOC entry. Also fix the `--check` cross-link in the CLI options table: GitHub slugifies "Checking the output — `--check`" to `checking-the-output----check`, with a hyphen for each space around the dropped em dash, so the two-hyphen anchor never resolved. --- README.md | 69 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 1e8d803..64cda53 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,34 @@ Point it at a spec; get back an installable package with data models, request classes, a sync and/or async client, an exception hierarchy, and authentication wiring. The output is formatted with `ruff` and type-checks clean under `mypy --strict`. +## Table of Contents + +- [Why](#why) +- [Install](#install) +- [Quick start](#quick-start) +- [Alternative: the unihttp agent skills](#alternative-the-unihttp-agent-skills) +- [What you get](#what-you-get) +- [Using the client](#using-the-client) + - [Base URL and servers](#base-url-and-servers) + - [Authentication](#authentication) + - [Custom headers, cookies, timeouts](#custom-headers-cookies-timeouts) + - [Errors](#errors) + - [Middleware](#middleware) +- [CLI options](#cli-options) + - [Config file](#config-file) +- [Serializers](#serializers) +- [Generation options](#generation-options) + - [Client layout — `--layout`](#client-layout----layout) + - [File layout — `--file-layout`](#file-layout----file-layout) + - [Method style — `--style`](#method-style----style) + - [Optional fields — `--optional`](#optional-fields----optional) + - [Inheritance — `--inheritance`](#inheritance----inheritance) +- [OpenAPI coverage](#openapi-coverage) +- [Checking the output — `--check`](#checking-the-output----check) +- [Limitations](#limitations) +- [Development](#development) +- [License](#license) + ## Why - **Actually typed.** Models, parameters, and return values carry real annotations; @@ -61,6 +89,26 @@ with AcmeClient(base_url="https://api.example.com", token="...") as client: print(pet.name) ``` +## Alternative: the unihttp agent skills + +No spec, or you would rather have the client written for you? +[unihttp](https://github.com/goduni/unihttp) ships +[agent skills](https://github.com/goduni/unihttp#agent-skills) for Claude Code, Codex, +and other `.agents/`-aware agents. `unihttp-client` scaffolds the same kind of packaged, +typed client — models, request classes, a client, `ruff`/`mypy` config, and tests — +from an OpenAPI 3.x spec **or from a plain description of the API**; `unihttp` teaches +the agent to write idiomatic unihttp code by hand. + +```bash +claude plugin marketplace add goduni/unihttp +claude plugin install unihttp@unihttp +``` + +Which to use: this generator is deterministic and regenerable — the same spec always +produces the same package, and it swallows specs far larger than an agent's context. +Reach for the skills when there is no machine-readable spec at all, or when you want a +small client shaped by hand as it is written. + ## What you get ``` @@ -205,7 +253,7 @@ unihttp-openapi-generator generate SPEC [options] | `--optional` | `none` · `omitted` (`none`) — `omitted` distinguishes absent from null (adaptix) | | `--strip-prefix` | `auto` or a dotted prefix to drop from schema names (e.g. `io.k8s.api.core.v1.Pod` → `CoreV1Pod`) | | `--inheritance` | off by default — render `allOf: [$ref]` as a base class instead of merging its fields in | -| `--check` | run `ruff` and `mypy --strict` on the output ([details](#checking-the-output--check)) | +| `--check` | run `ruff` and `mypy --strict` on the output ([details](#checking-the-output----check)) | | `--config` | TOML config file | ### Config file @@ -457,25 +505,6 @@ uv add --dev unihttp-openapi-generator - Swagger / OpenAPI 2.0 is not supported (use the OpenAPI 3 description if a service publishes both, as Kubernetes does). -## Without a spec — unihttp's agent skills - -[unihttp](https://github.com/goduni/unihttp) ships -[agent skills](https://github.com/goduni/unihttp#agent-skills) that let a coding agent -(Claude Code, Codex, …) write the client instead. `unihttp-client` scaffolds the same -kind of packaged, typed client — models, request classes, a client, `ruff`/`mypy` -config, and tests — from an OpenAPI 3.x spec **or from a plain description of the API**; -`unihttp` teaches the agent to write idiomatic unihttp code by hand. - -```bash -claude plugin marketplace add goduni/unihttp -claude plugin install unihttp@unihttp -``` - -Which to use: this generator is deterministic and regenerable — the same spec always -produces the same package, and it swallows specs far larger than an agent's context. -Reach for the skill when there is no machine-readable spec at all, or when you want a -small client shaped by hand as it is written. - ## Development ```bash