egisai.init() runs, supported provider SDKs are patched in
place and each call goes through the same lifecycle.
The call path
1
Your code calls the provider
Your code makes an ordinary call —
client.chat.completions.create(...),
client.messages.create(...), model.generate_content(...), etc. There
are no wrapper objects to remember.2
Request evaluation
Before the upstream model runs, the SDK applies your organization’s active
request-phase policies (cached locally and refreshed continuously).
Rules such as PII detection, regex denylists, model allowlists,
prompt-size caps, and intent-oriented checks for the prompt fall in this
phase. See Policies and
Two-phase governance.
3
A request verdict is computed
Each call resolves to one of three outcomes:
- Allow — forwarded to the provider as-is.
- Sanitize — sensitive values are masked locally, then the cleaned payload is forwarded.
- Block — the call is refused. Depending on configuration the SDK
raises
PermissionErroror returns a framework-shaped refusal object.
4
The provider call runs (or doesn't)
On
allow or sanitize the patched method delegates to the original
provider SDK using the (possibly cleaned) payload. Blocked calls never
reach the provider, so response evaluation is skipped.5
Response evaluation
When the model responds, response-phase policies run against the
assistant’s text, tool invocations, and connector targets. A blocked
response is suppressed before it reaches your code, exactly the same way
a blocked prompt would be.
6
An audit event is emitted
A structured event describing both phases, the matched rules, latency,
and usage is delivered asynchronously so it never sits on the critical
path of your model call. The audit row carries each phase’s decision
independently —
prompt_decision and response_decision — so the
dashboard can show which side fired and which rules matched.Two-phase evaluation
Each governed call is evaluated in two phases — once before the model runs and once after it returns — so policies can intervene on either side independently.Request phase
Runs against the prompt before the provider is called. Local
deterministic checks (PII patterns, regex denylists, prompt-size caps,
model allow-lists) run first; LLM-backed intent checks run only after,
and only on a sanitized copy if a deterministic rule asked for one. Raw
prompt content never leaves your environment as part of these checks.
Response phase
Runs against the model response — assistant text, tool invocations,
shell commands, and connector targets. If the response is blocked, the
SDK suppresses it before it reaches your code, the same way a blocked
prompt would be.
If the request phase blocks the call, the model is never invoked and the
response phase is skipped. The audit event records
prompt_decision only
in that case; response_decision is left null.What is governed
The SDK governs supported direct provider SDKs and the major agent frameworks in-process:- Direct provider SDKs.
openai(Chat Completions, Responses API, streaming),anthropic(Messages API, streaming, tool use),google-genaiandgoogle-generativeai(generate_content, async, streaming, function calls), andboto3for AWS Bedrock Converse + Bedrock Agents. - Agent frameworks.
openai-agents,claude-agent-sdk,langchain(classic + 1.x),langgraph,crewai,autogen,agno,strands-agents,smolagents,llama-index,pydantic-ai,google-adk. - HTTP fallback.
httpx/requests— optional broad capture for libraries that bypass the official provider SDKs. Matches on known provider hosts AND known model-call path tokens to avoid logging unrelated traffic.
claude-agent-sdk specifically, PreToolUse + PostToolUse hooks gate
tool dispatch and tool results inside the SDK process — see
Claude Agent SDK.
Steady-state cost
After the first call for a given identity, local rules (PII, regex, size caps, model allow-lists) are a dictionary lookup — a fraction of a millisecond after warm-up. Intent checks (semantic_guard) call the hosted
control plane; that round-trip is network time, not CPU. See
Where to run the SDK.
Audit delivery is asynchronous; latency to EgisAI does not block your
provider call.
Where to run the SDK
The hosted control plane — policy fetch, the intent judge, and audit ingest — runs in GCPus-west1 (Oregon).
Dashboard Policy is processing time of the rules that ran: local CPU
plus the judge model’s own compute. It does not include the hop from
your process to Egis, the hop from Egis to the judge model, TLS connect,
or time spent in the model’s queue. That number is the same whether the
SDK runs on a laptop or next to the control plane, and it matches the
inline gateway.
Transit still depends on placement. Running egisai.init() in us-west1
(or nearby on the west coast) shortens the hop from your process to Egis
and makes the call faster. It does not change the Policy number.
A laptop or a region a continent away can add on the order of
150–200 ms of transit on each intent-judge round-trip compared with a
process already in us-west1. That wait is real; it just is not what
Policy reports. Local checks (PII, regex) do not pay this hop.
Failure modes
The SDK is built to fail open on availability and fail closed on PII.
For your specific deployment’s behavior, see your contract and the SECURITY document.
What’s next
Verdicts
Allow, sanitize, and block — what each one means in detail.
Agents
How the SDK identifies which agent made each call.
Policies
Categories of rules and where they’re configured.
Blocking behavior
Choose between
raise and stub modes.