Agent skill

Venice Chat

by veniceai in veniceai/skills

Call POST /chat/completions on Venice. An agent skill from veniceai/skills.

MITAuto-check passedAI & LLM Engineering

Install Venice Chat

skills CLI
$ npx skills add veniceai/skills --skill venice-chat -a claude-code

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

GitHub CLI
$ gh skill install veniceai/skills venice-chat --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/veniceai/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/venice-chat .claude/skills/venice-chat && 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
venice-chat
GitHub stars
144
Token cost
~5.9k tokens
SKILL.md length
2,397 words
Files
1
Skills in repo
22
Repo updated
First seen
Licence
MIT

At a glance

Call POST /chat/completions on Venice. An agent skill from veniceai/skills.

  • Works in 4 steps: GET… → Generate a per-session secp256k1 key… → Send the request with… → …
  • Tasks that involve LLM API integration
  • SKILL.md covers Use when, Minimal request, The request body and Messages and modalities, plus 8 more sections
  • Calls curl; reaches api.venice.ai and youtube.com; needs VENICE_API_KEY

What it does

Venice Chat is an agent skill from veniceai/skills. Call POST /chat/completions on Venice. Covers the OpenAI-compatible request shape, Venice-only veniceparameters (web search, scraping, citations, E2EE, characters, thinking control, X search), anonuserid, multimodal inputs (images/audio/video/files), tool calls, reasoning controls (reasoningeffort, reasoning.enabled), streaming, prompt caching, structured output, per-model caps, and model feature suffixes.

Its SKILL.md is about 5.9k 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 AI & LLM Engineering, covering LLM API integration, Web scraping and Structured output and tool calling. It works with OpenAI. The repository describes itself as: Agent Skills for the Venice.ai API. One folder per surface area, each with a SKILL.md for agent runtimes (Cursor, Claude, Codex, etc.). The licence is MIT.

When your agent uses it

  • Tasks that involve LLM API integration
  • Tasks that involve Web scraping
  • Tasks that involve Structured output and tool calling

Example prompts

  • “/venice-chat”

Requirements

  • Python 3
  • A credential in VENICE_API_KEY

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. GET /api/v1/tee/attestation?model=&nonce=<64 hex chars> (no auth needed, 10 req/min/IP). Verify it and take the model's public key.
  2. Generate a per-session secp256k1 key pair. Encrypt every user and system message with ECDH → HKDF-SHA256 → AES-256-GCM.
  3. Send the request with X-Venice-TEE-Client-Pub-Key and X-Venice-TEE-Model-Pub-Key (secp256k1 hex keys), X-Venice-TEE-Signing-Algo: ecdsa…
  4. Decrypt the streamed content with your private key.

What it can do on your machine

Read from SKILL.md and the folder at commit 5eaeac5. 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:

    • curl

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.venice.ai
    • youtube.com

    Also links to:

    • docs.venice.ai

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

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • VENICE_API_KEY

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

Context cost

Venice Chat loads about 5.9k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 2,397 words of instructions outside code blocks.

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

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 veniceai/skills at commit 5eaeac5, republished under its MIT licence (© veniceai). 2,397 words, ~5,865 tokens.

Download SKILL.mdSave it as .claude/skills/venice-chat/SKILL.md (or your agent's skills folder).
name
venice-chat
description
Call POST /chat/completions on Venice. Covers the OpenAI-compatible request shape, Venice-only venice_parameters (web search, scraping, citations, E2EE, characters, thinking control, X search), anon_user_id, multimodal inputs (images/audio/video/files), tool calls, reasoning controls (reasoning_effort, reasoning.enabled), streaming, prompt caching, structured output, per-model caps, and model feature suffixes.

Venice Chat Completions

POST /api/v1/chat/completions is Venice's main text endpoint. It's OpenAI-compatible, plus a venice_parameters object for Venice-only features. Auth is a Bearer API key or an x402 wallet (SIGN-IN-WITH-X); see venice-auth.

Use when

  • You need LLM text generation, with or without tools, with or without streaming.
  • You want multimodal inputs (images, audio, video, documents) to a capable model.
  • You want Venice-specific features: web search, web scraping, citations, E2EE, characters, xAI X/Twitter search, thinking control.
  • You need prompt caching for large system prompts or long documents.
  • You need structured (json_schema) output.

For the OpenAI Responses-style shape (typed output[] blocks), see venice-responses. To pick a model, see venice-text-routing.

Minimal request

bash
curl https://api.venice.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "zai-org-glm-5-1",
    "messages": [{"role": "user", "content": "Why is the sky blue?"}]
  }'

OpenAI SDK (Python) — Venice-only fields go in extra_body:

python
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["VENICE_API_KEY"], base_url="https://api.venice.ai/api/v1")
resp = client.chat.completions.create(
    model="zai-org-glm-5-1",
    messages=[{"role": "user", "content": "Summarize today's AI news."}],
    extra_body={"venice_parameters": {"enable_web_search": "auto", "include_venice_system_prompt": False}},
)

Response shape is the standard OpenAI chat.completion object (id, object: "chat.completion", created, model, choices[].message, choices[].finish_reason, usage) plus:

  • cost: {usd, diem} — the request's cost split by the currency it was charged in (bundled credits count as USD). 0 when the response has no output tokens (those responses are not billed). Omitted if the cost can't be computed, and currently also when the request was charged to earned credits.
  • venice_parameters — the effective Venice settings, plus web_search_citations[] (an empty array when no search ran).
  • usage.prompt_tokens_details.{cached_tokens, cache_creation_input_tokens} and usage.completion_tokens_details.reasoning_tokens when the provider reports them.

choices[].finish_reason is one of stop, length, tool_calls, or content_filter. content_filter is a 200 in which the model refused or the output was cut (e.g. a Claude refusal); it is not a 422, so check for it before trusting message.content. Some providers block mid-stream instead; the stream then ends with an in-band error chunk (type: "content_filter_error", code: "content_blocked_by_provider") followed by [DONE].

system_fingerprint is always stripped. With stream: true, responses come as SSE data: lines in chat.completion.chunk format.

The request body

The top-level schema is strict: unknown top-level fields return 400. (A few compatibility aliases are rewritten before validation: input → messages, max_output_tokens → max_tokens, web_search: true|false → enable_web_search, promptCacheKey → prompt_cache_key.)

Core fields (OpenAI-compatible)
FieldNotes
modelstring — model ID, trait (e.g. default, default_code), or compatibility mapping. Required. Feature suffixes allowed (see below). Lookups also tolerate dots/underscores/spaces (kimi k2.6 → kimi-k2-6) and a venice- prefix (for IDEs that hijack claude-* names).
messagesarray of system / developer / user / assistant / tool messages. Required, min 1. Assistant messages with neither content nor tool_calls are silently dropped.
temperature (0–2), top_p (0–1), top_k (int ≥ 0), min_p (0–1), min_temp, max_temp (0–2)sampling controls. Some models publish defaults in model_spec.constraints
repetition_penalty (≥ 0), frequency_penalty, presence_penalty (−2..2)repetition controls
max_completion_tokens / max_tokens (deprecated)integers. Output cap including reasoning tokens. Above the model's model_spec.maxCompletionTokens → 400 on models with an enforced API cap. max_tokens ≤ 0 is ignored; max_tokens is ignored when max_completion_tokens is set
nnumber of choices (default 1; you pay for all choices)
seedpositive integer
stop / stop_token_idsstring or 1–4 strings / array of token IDs
stream, stream_options.include_usageSSE streaming (Venice sends the usage chunk even without include_usage — see Streaming)
response_format{type:"json_schema", json_schema:{name, schema, strict}} (preferred), {type:"json_object"}, or {type:"text"}
tools, tool_choice, parallel_tool_callsfunction calling
logprobs, top_logprobs (int ≥ 0)log-probabilities
reasoning_effort / reasoning.effortnone | minimal | low | medium | high | xhigh | max. reasoning_effort wins if both are set
reasoning.enabledfalse disables reasoning on supported models. Ignored when an effort is set
reasoning.summaryauto | concise | detailed
prompt_cache_keycache-routing hint. If omitted, Venice derives a stable key per API user
prompt_cache_retentiondefault | extended | 24h. extended and 24h extend retention to 24 hours on supported models
verbosity / text.verbositylow | medium | high | auto (both placements accepted). Non-reasoning OpenAI models accept only medium / auto (400 otherwise)
anon_user_idoptional end-user identifier (see below)
fallbacksup to 10 {model} entries. Anthropic beta parameter for Claude Fable 5 server-side refusal fallback. Forwarded only on direct Anthropic routes, ignored elsewhere
include, metadataaccepted for OpenAI compatibility, removed before validation and not forwarded
user, storeaccepted and discarded (OpenAI compat). user is not an alias of anon_user_id

anon_user_id — identifies your end user; Venice combines it with your Venice user id when attributing the request upstream. Trimmed (a blank value is treated as absent); 1–128 characters; printable ASCII only (0x20–0x7E); must not contain ||. Violations → 400. Also accepted on /responses.

Capability gates (400 before inference)
You sendModel must have (model_spec.capabilities)
image_url partssupportsVision
input_audio partssupportsAudioInput
video_url partssupportsVideoInput
tools, tool_choice, parallel_tool_calls: truesupportsFunctionCalling
response_format other than textsupportsResponseSchema
logprobs: true or any top_logprobssupportsLogProbs

Each rejection is a 400 whose issues[] entry for that field gives the reason; read issues, not just the top-level error.

OpenAI reasoning models (e.g. openai-gpt-52) also reject seed, stop, n ≠ 1, and non-zero presence_penalty / frequency_penalty with 400 (the issues[] entry for that field reads "<field> is not supported by this model").

venice_parameters (Venice-only)

All optional. Unknown keys inside venice_parameters are dropped.

FieldTypeDefaultEffect
character_slugstring—Apply a published Venice character (the "Public ID" on its page). Unknown slug → 404. See venice-characters.
strip_thinking_responseboolfalseStrip reasoning from the response (<think> blocks and reasoning_content) on reasoning models.
disable_thinkingboolfalseDisable thinking on supported reasoning models and strip reasoning. On models that can't turn reasoning off, reasoning still runs (some drop to their lowest effort) but is stripped from the response; those reasoning tokens may still be billed.
enable_e2eebooltrueOn E2EE-capable models, use E2EE when E2EE headers are present. false forces TEE-only mode.
enable_web_search"off" / "auto" / "on""off"Venice web search. on always searches; auto lets a classifier decide.
enable_web_scrapingboolfalseScrape URLs found in the latest user message. When URLs are found, scraping replaces web search for that request.
enable_web_citationsboolfalseAsk the model to cite sources as ^1^ / ^1,3^.
include_search_results_in_streamboolfalseExperimental. Streaming only: emit a choices: [] chunk carrying venice_parameters.web_search_citations at the end of the stream, before data: [DONE].
return_search_results_as_documentsbool—Also surface search results as a synthetic tool call (see Web search).
include_venice_system_promptbooltruePrepend Venice's system prompt to yours. Set false for full control.
enable_x_searchboolfalsexAI native web + X search on models with supportsXSearch (Grok). Ignored on other models. Billed per search (~$0.01).
Model feature suffixes

Some venice_parameters can be set on the model string — useful when the client (OpenAI SDK, LangChain, an IDE) can't send venice_parameters:

<model-id>:<key>=<value>[&<key>=<value>…]

Values are URL-decoded; booleans are true / false. Suffixes override the same keys in venice_parameters. Supported keys (exact match):

KeyValuesMaps to
enable_web_searchon / off / autovenice_parameters.enable_web_search
enable_web_citationstrue / falsevenice_parameters.enable_web_citations
enable_web_scrapingtrue / falsevenice_parameters.enable_web_scraping
include_venice_system_prompttrue / falsevenice_parameters.include_venice_system_prompt
include_search_results_in_streamtrue / falsevenice_parameters.include_search_results_in_stream
return_search_results_as_documentstrue / falsevenice_parameters.return_search_results_as_documents
character_slugstringvenice_parameters.character_slug
strip_thinking_responsetrue / falsevenice_parameters.strip_thinking_response
disable_thinkingtrue / falsevenice_parameters.disable_thinking

Unknown keys are silently ignored. enable_e2ee and enable_x_search are not suffix keys. Suffixes only apply on /chat/completions — /responses resolves the model but ignores the suffix.

zai-org-glm-5-1:enable_web_search=on
kimi-k2-6:strip_thinking_response=true&enable_web_search=auto
zai-org-glm-5-1:character_slug=alan-watts

Messages and modalities

messages[].content is a string or an array of typed parts. Roles: user, assistant, tool, system, developer. Only user messages may carry image / audio / video / file parts; system / developer / assistant array content is text-only. Anthropic-style tool_use / tool_result blocks and Cursor-style {type:"image"} parts are converted automatically.

Per-message caps: 10 image_url, 5 input_audio, 3 video_url, 5 file parts. Per-request cap: 3 video_url parts total.

Images (image_url)
json
{
  "model": "kimi-k2-6",
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "What's in this image?"},
      {"type": "image_url", "image_url": {"url": "https://example.com/cat.jpg"}}
    ]
  }]
}
  • url is a public http(s) URL or a data:image/...;base64,... URL (the example.com placeholder above fails validation — swap in a real image). Remote URLs are fetched once for validation: redirects are refused, the body must be ≤ 25 MB, the Content-Type must be PNG, JPEG, WebP, HEIF/HEIC, or AVIF, and the image must decode and be ≥ 64 px on each side (data URLs get the same decode + size check). Failures → 400 "Supplied image did not pass validation checks."
  • Models with supportsMultipleImages: true keep images across the whole conversation (maxImages advertises the model's per-request limit; Venice itself enforces the 10-per-message cap). Single-image vision models keep images only from the last image-bearing message; earlier images are removed.
Audio (input_audio)
json
{"type": "input_audio", "input_audio": {"data": "<base64>", "format": "wav"}}

format: wav (default), mp3, aiff, aac, ogg, flac, m4a, pcm16, pcm24. Audio must be inline base64 — URLs are not supported.

Video (video_url)
json
{"type": "video_url", "video_url": {"url": "https://www.youtube.com/watch?v=..."}}
  • YouTube watch/share/embed links are accepted without a pre-fetch (provider support varies).
  • data:video/...;base64,... URLs must declare video/mp4, video/mpeg, video/quicktime, video/mov, or video/webm.
  • Other remote URLs must return 2xx without redirects and one of those Content-Types. Failures → 400 "Supplied video did not pass validation checks."
  • More than 3 video_url parts in a request → 400 (checked before any URL is fetched).
Documents (file)
json
{"type": "file", "file": {"file_data": "data:application/pdf;base64,JVBERi0...", "filename": "report.pdf"}}

file_data is a data URL or a public URL. PDF, EPUB, DOCX, PPTX, XLSX, XLS, plain text, Markdown, CSV, JSON, and most source-code files are extracted to text server-side (so any text model works); image files become image_url parts. A file that fails extraction becomes an inline [Error processing file …] text part rather than a request error. Not allowed on E2EE requests.

Show full SKILL.md (987 more words)Show less
Prompt caching (cache_control)

Any content part can carry {"cache_control": {"type": "ephemeral"}} or {"type": "ephemeral", "ttl": "1h"}. Explicit markers matter for models that require them (Claude); other models cache automatically on prefix matches. Those models allow at most 4 breakpoints per request; Venice adds its own to the system prompt and conversation history only while your markers leave slots free. Pair with a stable prompt_cache_key for consistent routing. Cache read / write prices are per model (model_spec.pricing.cache_input / cache_write); hits are reported in usage.prompt_tokens_details.

Tools & function calling

json
{
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "Get current weather for a city",
      "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
      "strict": true
    }
  }],
  "tool_choice": "auto"
}
  • tool_choice: "auto", "required", "none", or {"type":"function","function":{"name":"get_weather"}}. {"type":"auto" | "none" | "required"} is normalized to the string form.
  • parallel_tool_calls defaults to true — be ready to run several calls before replying.
  • Reply with one {"role":"tool","tool_call_id":"...","content":"..."} message per call, then call again.
  • Flat ({type, name, parameters}) and Anthropic ({name, input_schema}) tool definitions are converted to the nested format.
  • When the message carries tool calls, Venice reports finish_reason: "tool_calls" rather than stop (a length cut-off stays length).
  • The schema also accepts {"type":"web_search"} / {"type":"x_search"} tool entries, but they do not turn on Venice search or xAI X search. Use venice_parameters.enable_web_search / enable_x_search instead.

Reasoning models

json
{
  "model": "zai-org-glm-5-1",
  "reasoning": {"effort": "medium"},
  "messages": [{"role": "user", "content": "Prove there are infinitely many primes."}]
}
  • Reasoning arrives in message.reasoning_content (delta.reasoning_content when streaming); <think> tags are removed from content. Some providers return encrypted or summarized reasoning.
  • Supported effort values are per model: check model_spec.capabilities.supportsReasoningEffort, reasoningEffortOptions, and defaultReasoningEffort. On most Claude models and on OpenAI GPT models, a value outside reasoningEffortOptions → 400 (none is always accepted as a Venice-level off switch; on OpenAI models minimal is also accepted and maps to the lowest supported level). Other models are not pre-validated, so stick to reasoningEffortOptions.
  • To turn thinking off, prefer reasoning: {"enabled": false} or venice_parameters.disable_thinking: true — both degrade gracefully on mandatory-reasoning models. reasoning_effort: "none" also disables thinking where the model allows it, but some mandatory-reasoning models reject it; prefer the two switches above.
  • Some models return reasoning_details[] (and Gemini via native transport returns thought_signature) on the assistant message. Pass them back verbatim on the next turn, especially in tool loops, to preserve thought signatures.
  • Reasoning tokens count toward max_completion_tokens and are billed as output.

Structured output (response_format)

json
{
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "person",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {"name": {"type": "string"}, "age": {"type": "number"}},
        "required": ["name", "age"],
        "additionalProperties": false
      }
    }
  }
}

Put the JSON Schema under json_schema.schema (OpenAI shape) — Claude, Gemini, and Grok models only read it from there. json_object is deprecated and ignored by Claude models. Requires supportsResponseSchema.

E2EE (end-to-end encryption)

For models with supportsE2EE: true (the e2ee-* IDs), following the TEE & E2EE guide:

  1. GET /api/v1/tee/attestation?model=<id>&nonce=<64 hex chars> (no auth needed, 10 req/min/IP). Verify it and take the model's public key.
  2. Generate a per-session secp256k1 key pair. Encrypt every user and system message with ECDH → HKDF-SHA256 → AES-256-GCM.
  3. Send the request with X-Venice-TEE-Client-Pub-Key and X-Venice-TEE-Model-Pub-Key (secp256k1 hex keys), X-Venice-TEE-Signing-Algo: ecdsa, and stream: true (the guide requires streaming). Malformed headers → 400 with {"error":{"message":"Invalid E2EE headers: …","type":"invalid_request_error"}}.
  4. Decrypt the streamed content with your private key.

On E2EE requests Venice injects nothing: no Venice system prompt, character, web search, or scraping. file parts → 400. The guide also lists function calling as unsupported. Without E2EE headers (or with enable_e2ee: false) the same model runs in TEE-only mode. TEE responses carry X-Venice-TEE: true and X-Venice-TEE-Provider. E2EE is not available on /responses.

Streaming

json
{"stream": true}
  • text/event-stream, one data: {chat.completion.chunk} per event, terminated by data: [DONE].
  • Venice requests usage from the model and emits it in a choices: [] chunk with usage (and cost) before [DONE], whatever stream_options.include_usage says. Usage is not repeated on content chunks.
  • If the upstream fails after headers are sent, you get an in-band data: {"error": {...}} chunk (e.g. code: "model_overloaded" with retry_after, upstream_error, or content_blocked_by_provider) followed by [DONE].
  • Web-search citations are not in the stream unless include_search_results_in_stream: true, in which case a choices: [] chunk with venice_parameters.web_search_citations arrives at the end of the stream, before [DONE].
  • With return_search_results_as_documents: true, the synthetic web_search_call tool call (see Web search) is streamed as a delta.tool_calls chunk before the content.
  • Non-streaming responses include venice_parameters.web_search_citations[] with url, title, content (snippet), and date. Add enable_web_citations: true to get ^n^ markers in the text.
  • Search is skipped on E2EE requests, when the last user message contains an image, and when scraping found URLs in that message.
  • return_search_results_as_documents: true adds a synthetic tool call {id:"web_search_call", type:"function", function:{name:"web_search", arguments:"{\"documents\":[{id,title,url,snippet,published_at}]}"}} and sets finish_reason: "tool_calls". Don't try to execute it.
  • Billing: $0.01 per search-augmented request, $0.01 per scraped URL, $0.01 per xAI X search.

Error handling specifics

StatusWhen
400Invalid body (error: "Invalid request parameters", per-field reasons in issues[]), capability rejections, invalid image/video, too many parts, context length exceeded, token cap exceeded, bad E2EE headers
401Invalid API key or SIWX sign-in; also a model that requires a paid subscription
402No credentials at all (x402 discovery body — not 401), insufficient balance, or API-key spend limit. x402 insufficient balance: code: "PAYMENT_REQUIRED" body with topUpInstructions + siwxChallenge, and a PAYMENT-REQUIRED header (venice-x402)
403Model not allowed by the API key's modelPrivacy, region-restricted model, or provider restriction
404Unknown model (often with a "Did you mean" hint) or character_slug
413Payload too large
422Content-policy violation (Venice or provider)
429Rate limit exceeded ("Rate limit exceeded" or the error-budget message), or model overloaded ("The model is currently overloaded…" with a Retry-After header). Both carry x-ratelimit-* headers, so tell them apart by Retry-After and the message
500 / 503 / 504Inference failed / model offline / upstream timeout

See venice-errors for shapes and retry strategy.

Common gotchas

  • max_tokens is deprecated — use max_completion_tokens, and stay under model_spec.maxCompletionTokens.
  • Unknown top-level fields are rejected (400); unknown venice_parameters keys are silently dropped.
  • Image and video URLs must be publicly reachable without redirects. Signed S3 URLs that redirect or localhost URLs fail.
  • Audio cannot be a URL — always base64.
  • Single-image vision models drop older images each turn; put images in the last user message.
  • Round-trip reasoning_details / thought_signature unchanged in multi-turn tool loops.
  • character_slug adds the character's system prompt ahead of yours. Venice's own prompt is still included unless the character uses a custom system prompt or you set include_venice_system_prompt: false.
  • web_search / x_search tool entries are not Venice search — use venice_parameters.
  • OpenAI reasoning models reject seed, stop, n > 1, and non-zero penalties.

© veniceai, 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 skills/venice-chat of veniceai/skills.

Open the folder on GitHubat commit 5eaeac5

Compare with similar skills

Venice Chat 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.

Venice Chat compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Venice Chat this skillveniceai/skills144—~5.9kAutomated safety check: PassMIT
Dingo VerifyMigoXLab/dingo757—~833Automated safety check: PassApache-2.0
Agnes Free Textkangarooking/agnes-free-model-skills199—~630Automated safety check: PassMIT
Instructor Structured LLM OutputsOrchestra-Research/AI-Research-SKILLs13k6 repos~4.2kAutomated safety check: PassMIT
AI Search Visibility Auditdavepoon/buildwithclaude3.6k—~2.4kAutomated safety check: PassMIT
Azure Openai To Responsesmicrosoft/ai-agents-for-beginners77k—~6kAutomated safety check: NotesMIT

Similar skills

  • Dingo Verify

    MigoXLab/dingo

    A skill your agent uses when the user wants to fact-check an article or verify factual claims in a document.

    757 GitHub stars~833 tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Agnes Free Text

    kangarooking/agnes-free-model-skills

    Call the free Agnes text model API for chat completions, streaming answers, coding help, tool-calling experiments, and OpenAI-compatible text generation.

    199 GitHub stars~630 tokensUpdated 4 mo ago
    AI & LLM EngineeringAuto-check passed
  • Instructor Structured LLM Outputs

    Orchestra-Research/AI-Research-SKILLs

    Shows how to pull validated, typed data out of LLM responses with Instructor and Pydantic models, including retries on failure and partial streaming.

    13k GitHub starsUsed in 6 repos~4.2k tokens
    AI & LLM EngineeringAuto-check passed
  • AI Search Visibility Audit

    davepoon/buildwithclaude

    Audit whether a website can be found, crawled, and cited by AI answer engines such as ChatGPT Search, Perplexity, Google AI Overviews, and Microsoft Copilot.

    3.6k GitHub stars~2.4k tokensUpdated yesterday
    Marketing & SEOAuto-check passed
  • Azure Openai To Responses

    microsoft/ai-agents-for-beginners

    Official

    Migrate Python apps from Azure OpenAI Chat Completions to the Responses API.

    77k GitHub stars~6k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check: notes
  • Afm

    scouzi1966/maclocal-api

    Maintain and extend AFM (maclocal-api), a Swift OpenAI-compatible local LLM server and CLI for Apple Foundation Models, MLX models, API gateway proxying, and Vision OCR.

    346 GitHub stars~1.2k tokensUpdated today
    AI & LLM EngineeringAuto-check passed

More from veniceai/skills

All 22 skills in this repo
  • Picks which Venice text model to call for a prompt based on privacy tier, input modality, capabilities and cost, and decides when to escalate from a local agent.

    144 GitHub stars~5.2k tokensUpdated 5 days ago
    Auto-check passed
  • Venice Models API

    veniceai/skills

    Documents Venice's model discovery endpoints, GET /models, /models/traits and /models/compatibility_mapping, so an agent can pick a model by capability, constraint or price.

    144 GitHub stars~4.3k tokensUpdated 5 days ago
    Auto-check passed
  • Venice API Keys

    veniceai/skills

    Manages Venice API keys through the /api_keys endpoints: create, list, update and revoke keys, set spending limits, and read rate limits.

    144 GitHub stars~3.8k tokensUpdated 5 days ago
    Auto-check passed
  • Venice API Overview

    veniceai/skills

    High-level map of the Venice.ai API: base URL, auth modes per endpoint, endpoint categories, response headers, pricing model, error shape and versioning.

    144 GitHub stars~3.5k tokensUpdated 5 days ago
    Auto-check passed
  • Venice Audio Music

    veniceai/skills

    Async music, sound-effect and long-form voice generation via Venice.

    144 GitHub stars~3.1k tokensUpdated 5 days ago
    Auto-check passed
  • Venice Audio Speech

    veniceai/skills

    Generate speech from text via POST /audio/speech, and clone a voice via POST /audio/voices.

    144 GitHub stars~3.6k tokensUpdated 5 days ago
    Auto-check passed

Works with

Questions about Venice Chat

What does Venice Chat do?

Call POST /chat/completions on Venice. An agent skill from veniceai/skills. Venice Chat is an agent skill from veniceai/skills. Call POST /chat/completions on Venice.

When should I use Venice Chat?

Venice Chat fits situations like: tasks that involve LLM API integration; tasks that involve Web scraping; tasks that involve Structured output and tool calling.

How do I install Venice Chat in Claude Code?

Run `npx skills add veniceai/skills --skill venice-chat -a claude-code`. Or copy the skill folder (skills/venice-chat in veniceai/skills) into .claude/skills/venice-chat in your project. Claude Code loads it when a task matches its description.

How do I install Venice Chat in Codex?

Run `npx skills add veniceai/skills --skill venice-chat -a codex`. Or copy the skill folder (skills/venice-chat in veniceai/skills) into .agents/skills/venice-chat in your project. Codex loads it when a task matches its description.

Can I use Venice Chat 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 veniceai/skills --skill venice-chat -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/venice-chat, .gemini/skills/venice-chat, .github/skills/venice-chat and .opencode/skills/venice-chat in your project.

What does Venice Chat need to run?

Going by SKILL.md and its folder, Venice Chat needs the command-line tools its instructions call (curl) and credentials named VENICE_API_KEY. Our summary lists: Python 3; A credential in VENICE_API_KEY.

Does Venice Chat access the network?

SKILL.md names 3 domains. In commands or code: api.venice.ai and youtube.com; the agent is likely to contact these when it follows the instructions. As links in the text: docs.venice.ai. This is read from the text; nothing was executed.

Is Venice Chat 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 Venice Chat use?

Venice Chat 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 Venice Chat use?

About 5.9k tokens (SKILL.md is roughly 23k 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 Venice Chat?

Skills that share tags, products or a category with Venice Chat: Dingo Verify (MigoXLab/dingo, 757 stars), Agnes Free Text (kangarooking/agnes-free-model-skills, 199 stars), Instructor Structured LLM Outputs (Orchestra-Research/AI-Research-SKILLs, 13k stars) and AI Search Visibility Audit (davepoon/buildwithclaude, 3.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Venice Chat?

veniceai (a GitHub organization) maintains it in veniceai/skills, which has 144 GitHub stars. The repository holds 22 skills in this directory. The repository was last updated on October 5, 2026.

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