Skip to main content

Provider Onboarding Tiers

Four tiers, ordered by effort. Always pick the lowest tier that's actually true for the provider you're adding — a provider that's OpenAI-wire-compatible but gets built as a bespoke Tier 3 subclass "to be safe" is exactly the copy-pasted-boilerplate problem this redesign exists to eliminate (see ../adr/0002-catalog-over-subclass-default.md).

Is the model already served by an aggregator NeuroLink already speaks to
(LiteLLM proxy, OpenRouter)?
├─ Yes → Tier 1 — zero code. → tier-1-aggregator-passthrough.md
└─ No, it's a new backend.

Does it speak the OpenAI /v1/chat/completions wire format (Bearer
auth, standard SSE) with NO behavioral quirks (no custom body
mutation, no 400-retry dance, no nonstandard auth header)?
├─ Yes → Tier 2 — one catalog row, ~1 hour. → tier-2-catalog-entry.md
└─ No.

Does it need custom wire-format handling but is still a normal
HTTP+JSON API you can drive with a provider class (own SSE parser,
own auth scheme, own error shapes)?
├─ Yes → Tier 3 — adapter-based native, days. → tier-3-adapter-native.md
└─ No — non-HTTP protocol, SDK-mediated auth (e.g. AWS SigV4),
or a genuinely bespoke multi-step lifecycle.
→ Tier 4 — full custom, justify it. → tier-4-full-custom.md
TierExampleCode requiredTime
1 — Aggregator passthroughA new model id on an existing LiteLLM/OpenRouter routeNoneMinutes
2 — Catalog entryA new zero-quirk OpenAI-compatible vendor (the Groq/xAI/Together shape)One data row + one mocked-test section~1 hour
3 — Adapter-based nativeA vendor with its own SDK/wire format but a normal request/response HTTP lifecycleOne provider classDays
4 — Full customSageMaker-class: non-HTTP protocol, SDK-signed auth, bespoke lifecycleCustom executeStream/doGenerate, possibly own CLI subcommandsDays, needs written justification

Every tier that adds a new AIProviderName member (Tier 2 and above) ends the same way: a manifest at docs/provider-integration/manifests/<provider>.json (see ../manifests/README.md) and a green run of pnpm run verify:provider-onboarding (see ../../../tools/verify-provider-onboarding.ts, landing as a follow-up change — see the note below). Tier 1 needs no manifest and no gate — see tier-1-aggregator-passthrough.md.

Use ../../../tools/scaffold-provider.ts (pnpm run scaffold:provider) to generate the starting-point snippets for Tiers 2–4 instead of copy-pasting from an existing provider by hand.

Note on tooling (2026-08-18): tools/verify-provider-onboarding.ts and tools/scaffold-provider.ts don't exist in the tree yet — they are Tasks 8-9 of this plan, deliberately sequenced as a separate change after this documentation lands. Every tier doc in this directory describes the target workflow, including the commands those tools will provide; until they ship, follow the same checklist manually and cross-check against an existing provider of the matching tier.