Agent skill

Adding A Provider

by posit-dev in posit-dev/chatlas

A skill your agent uses when adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase, class and function structure, the standard…

MITAuto-check passedTesting & QA

Install Adding A Provider

skills CLI
$ npx skills add posit-dev/chatlas --skill adding-a-provider -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install posit-dev/chatlas adding-a-provider --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/posit-dev/chatlas.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/adding-a-provider .claude/skills/adding-a-provider && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
adding-a-provider
GitHub stars
176
Token cost
~1.1k tokens
SKILL.md length
277 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase, class and function structure, the standard…

  • Works in 7 steps: Research Phase → Implementation Steps → Testing Setup → …
  • Adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase
  • SKILL.md covers 1. Research Phase, 2. Implementation Steps, 3. Testing Setup and 4. Package Integration, plus 3 more sections
  • Calls uv and make

What it does

Adding A Provider is an agent skill from posit-dev/chatlas. Use when adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase, class and function structure, the standard test set, VCR cassette recording, and package integration.

Its SKILL.md is about 1.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA. It works with Python. The repository describes itself as: Your friendly guide to building LLM chat apps in Python with less effort and more clarity. The licence is MIT.

When your agent uses it

  • Adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase
  • Class and function structure
  • The standard test set
  • VCR cassette recording

Example prompts

  • “/adding-a-provider”

Requirements

  • Python 3

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Research Phase
  2. Implementation Steps
  3. Testing Setup
  4. Package Integration
  5. Provider-Specific Customizations
  6. Common Patterns
  7. Documentation Requirements

What it can do on your machine

Read from SKILL.md and the folder at commit 1746ec6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv
    • make

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use uv, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Adding A Provider loads about 1.1k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 277 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~66
When it runs · the whole SKILL.md, loaded when a task matches
~1.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from posit-dev/chatlas at commit 1746ec6, republished under its MIT licence (© posit-dev). 277 words, ~1,131 tokens.

Download SKILL.mdSave it as .claude/skills/adding-a-provider/SKILL.md (or your agent's skills folder).
name
adding-a-provider
description
Use when adding a new LLM provider to chatlas (a new `Chat<Name>()` / `<Name>Provider` in `chatlas/_provider_*.py`) — covers the research phase, class and function structure, the standard test set, VCR cassette recording, and package integration.

Adding New Providers

When implementing a new LLM provider, follow this systematic approach:

1. Research Phase

  • Check ellmer first: Look in ../ellmer/R/provider-*.R for existing implementations
  • Identify base provider: Most providers inherit from either OpenAIProvider (for OpenAI-compatible APIs) or implement Provider directly
  • Check existing patterns: Review similar providers in chatlas/_provider_*.py

2. Implementation Steps

  1. Create provider file: chatlas/_provider_[name].py

    • Use PascalCase for class names (e.g., MistralProvider)
    • Use snake_case for function names (e.g., ChatMistral)
    • Follow existing docstring patterns with Prerequisites, Examples, Parameters, Returns sections
  2. Provider class structure:

    python
    class [Name]Provider(OpenAIProvider):  # or Provider if custom
        def __init__(self, ...):
            super().__init__(...)
            # Provider-specific initialization
    
        def _chat_perform_args(self, ...):
            # Customize request parameters if needed
            kwargs = super()._chat_perform_args(...)
            # Apply provider-specific modifications
            return kwargs
  3. Chat function signature:

    python
    def Chat[Name](
        *,
        system_prompt: Optional[str] = None,
        model: Optional[str] = None,
        api_key: Optional[str] = None,
        base_url: str = "https://...",
        seed: int | None | MISSING_TYPE = MISSING,
        kwargs: Optional["ChatClientArgs"] = None,
    ) -> Chat["SubmitInputArgs", ChatCompletion]:

3. Testing Setup

  1. Create test file: tests/test_provider_[name].py
  2. Add environment variable skip pattern:
    python
    import os
    import pytest
    
    do_test = os.getenv("TEST_[NAME]", "true")
    if do_test.lower() == "false":
        pytest.skip("Skipping [Name] tests", allow_module_level=True)
  3. Add VCR support (for most providers):
    python
    @pytest.mark.vcr
    def test_[name]_simple_request():
        ...
    For async tests, put @pytest.mark.vcr before @pytest.mark.asyncio.
  4. Use standard test patterns:
    • test_[name]_simple_request()
    • test_[name]_simple_streaming_request()
    • test_[name]_respects_turns_interface()
    • test_[name]_tool_variations() (if supported)
    • test_data_extraction()
    • test_[name]_images() (if vision supported)
  5. Record VCR cassettes:
    bash
    # Set real API key, then record
    export [PROVIDER]_API_KEY="..."
    uv run pytest tests/test_provider_[name].py -v --record-mode=rewrite
Show full SKILL.md (171 more words)Show less

4. Package Integration

  1. Update chatlas/__init__.py:

    • Add import: from ._provider_[name] import Chat[Name]
    • Add to __all__ tuple: "Chat[Name]"
  2. Run validation:

    bash
    uv run pyright chatlas/_provider_[name].py
    uv run pytest tests/test_provider_[name].py -v  # Replays VCR cassettes
    uv run python -c "from chatlas import Chat[Name]; print('Import successful')"
    make check-vcr-secrets  # Ensure no secrets leaked in cassettes

5. Provider-Specific Customizations

OpenAI-Compatible Providers:

  • Inherit from OpenAIProvider
  • Override _chat_perform_args() for API differences
  • Common customizations: remove stream_options, adjust parameter names, modify headers

Custom API Providers:

  • Inherit from Provider directly
  • Implement all abstract methods: chat_perform(), chat_perform_async(), stream_content(), stream_merge_chunks(), etc.
  • Handle model-specific response formats

6. Common Patterns

  • Environment variables: Use [PROVIDER]_API_KEY format
  • Default models: Use provider's recommended general-purpose model
  • Seed handling: seed = 1014 if is_testing() else None when MISSING
  • Error handling: Provider APIs often return different error formats
  • Rate limiting: Consider implementing client-side throttling for providers that need it

7. Documentation Requirements

  • Include provider description and prerequisites
  • Document known limitations (tool calling, vision support, etc.)
  • Provide working examples with environment variable usage
  • Note any special model requirements (e.g., vision models for images)

© posit-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/adding-a-provider of posit-dev/chatlas.

Open the folder on GitHubat commit 1746ec6

Compare with similar skills

Adding A Provider next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Adding A Provider compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Adding A Provider this skillposit-dev/chatlas176—~1.1kAutomated safety check: PassMIT
Web Application Testinganthropics/skills180k51 repos~966Automated safety check: PassApache-2.0
OpenHarness End-to-End EvalsHKUDS/OpenHarness16k1 repos~2.1kAutomated safety check: NotesMIT
Adk Verify Snippetsgoogle/adk-python22k—~1.4kAutomated safety check: PassApache-2.0
Apple Container Test RunnerRustPython/RustPython22k—~467Automated safety check: PassMIT
JSON Repair Docs Demo Local Testmangiucugna/json_repair5.1k—~549Automated safety check: PassMIT

Similar skills

  • Web Application Testing

    anthropics/skills

    Official

    Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.

    180k GitHub starsUsed in 51 repos~966 tokens
    Testing & QAAuto-check passed
  • Validates OpenHarness features by running real multi-turn agent loops with live LLM calls against an unfamiliar codebase, checking actual tool execution.

    16k GitHub starsUsed in 1 repo~2.1k tokens
    Testing & QAAuto-check: notes
  • Adk Verify Snippets

    google/adk-python

    Official

    Checks that every Python code block in a Markdown file actually compiles and runs, by extracting each block to a temporary file, executing it in an isolated subprocess, and writing a pass/fail…

    22k GitHub stars~1.4k tokensUpdated today
    Testing & QAAuto-check passed
  • Apple Container Test Runner

    RustPython/RustPython

    Runs RustPython tests inside a Linux container built with Apple's container CLI, so macOS users can compare Linux results with their local ones.

    22k GitHub stars~467 tokensUpdated today
    Testing & QAAuto-check passed
  • JSON Repair Docs Demo Local Test

    mangiucugna/json_repair

    Runs the json_repair docs demo against a local Flask API and static server, so changes to docs/app.py or the docs UI are checked end to end before publishing.

    5.1k GitHub stars~549 tokensUpdated 6 days ago
    Testing & QAAuto-check passed
  • Official

    Refreshes stored golden values from a GitHub Actions run, reports signed percentage changes per model, and writes a summary ready for a pull request description.

    18k GitHub stars~2.8k tokensUpdated today
    Testing & QAAuto-check passed

Works with

Categories

Questions about Adding A Provider

What does Adding A Provider do?

A skill your agent uses when adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase, class and function structure, the standard…. Adding A Provider is an agent skill from posit-dev/chatlas.py) — covers the research phase, class and function structure, the standard test set, VCR cassette recording, and package integration.

When should I use Adding A Provider?

Adding A Provider fits situations like: adding a new LLM provider to chatlas (a new Chat<Name() / <NameProvider in chatlas/provider.py) — covers the research phase; class and function structure; the standard test set; VCR cassette recording.

How do I install Adding A Provider in Claude Code?

Run `npx skills add posit-dev/chatlas --skill adding-a-provider -a claude-code`. Or copy the skill folder (.claude/skills/adding-a-provider in posit-dev/chatlas) into .claude/skills/adding-a-provider in your project. Claude Code loads it when a task matches its description.

How do I install Adding A Provider in Codex?

Run `npx skills add posit-dev/chatlas --skill adding-a-provider -a codex`. Or copy the skill folder (.claude/skills/adding-a-provider in posit-dev/chatlas) into .agents/skills/adding-a-provider in your project. Codex loads it when a task matches its description.

Can I use Adding A Provider in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add posit-dev/chatlas --skill adding-a-provider -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/adding-a-provider, .gemini/skills/adding-a-provider, .github/skills/adding-a-provider and .opencode/skills/adding-a-provider in your project.

What does Adding A Provider need to run?

Going by SKILL.md and its folder, Adding A Provider needs the command-line tools its instructions call (uv and make). Our summary lists: Python 3.

Does Adding A Provider access the network?

SKILL.md contains no URLs. Its commands use uv, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Adding A Provider safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Adding A Provider use?

Adding A Provider is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Adding A Provider use?

About 1.1k tokens (SKILL.md is roughly 4.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Adding A Provider?

Skills that share tags, products or a category with Adding A Provider: Web Application Testing (anthropics/skills, 180k stars), OpenHarness End-to-End Evals (HKUDS/OpenHarness, 16k stars), Adk Verify Snippets (google/adk-python, 22k stars) and Apple Container Test Runner (RustPython/RustPython, 22k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Adding A Provider?

posit-dev (a GitHub organization) maintains it in posit-dev/chatlas, which has 176 GitHub stars. The repository was last updated on October 7, 2026.

Source: posit-dev/chatlas on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.