Skip to content
skyl

Data Handling

Exactly what leaves your process, what is kept, and what is written down.

skyl's entire function is sending your users' text to a third party. This page says exactly what leaves your process, derived from the code rather than from intent — written for the person who has to answer "where does the prompt go?" in a privacy review.

Short version#

  • Everything you put in a Request is transmitted to the provider you chose.
  • The library keeps nothing after a call returns, and logs nothing, ever.
  • The gateway logs metadata only — with one exception, named below.
  • Nothing is written to disk unless you explicitly turn on cassette recording.

What leaves your process#

Everything in the Request#

Every field of skyl.Request is transmitted: System, Messages (all text, images, tool calls and tool results), Tools, Model, sampling parameters, and ProviderOptions verbatim.

The credential#

One header per provider:

AdapterHeader
openai / openaicompatAuthorization: Bearer
anthropicX-Api-Key
geminix-goog-api-key

Gemini's key is deliberately a header rather than a URL parameter, so it does not land in proxy access logs.

Two negotiation headers#

Content-Type and Accept. That is the complete list skyl adds — no User-Agent, no client identifier, no request ID.

One exception: the Anthropic adapter#

What is kept in memory#

Response.Raw holds the provider's whole body for the life of the response. In a batch pipeline holding thousands of responses, that is the heap — extract what you need and drop the reference.

Client itself holds no per-request state. Request is retained only for the duration of the call, and is reused across retries.

What is written to disk#

Nothing, unless you turn on cassette recording — the mechanism that records real provider exchanges for offline replay. Credentials are scrubbed on write, and a test walks every committed fixture looking for credential-shaped strings.

What is logged#

The library logs nothing. It has no logger and takes no logging dependency.

The gateway logs method, path, status, duration, request ID, and the caller label from SKYL_AUTH_TOKENS — never headers, never bodies, never tokens.

skyl/otel records model, sampling parameters and token counts. No prompt content, deliberately: a span is a durable record shipped to a third-party backend.

Errors#

*skyl.Error carries provider, status, message, retry hint, and up to 2 KB of the provider's error body. It never contains credentials — there is a test asserting this.

The gateway deliberately does not forward provider error bodies to callers: they can echo request content back to someone who should not see it.

For your privacy review#

QuestionAnswer
Where does the prompt go?To the provider you constructed. skyl chooses no default provider and no default host.
Does skyl retain it?No. Nothing after the call returns.
Does skyl log it?No. The library has no logger.
Does skyl write it to disk?Only with cassette recording explicitly enabled.
Can I audit egress?Yes — supply your own *http.Client, or route everything through the gateway.
What about sub-processors?The provider's business. skyl adds none.

See also#

Edit this page on GitHub