Integration Paths
| Path | When to use | What it provides |
|---|---|---|
| QitOSAdapter | Direct Python integration | Full bridge class that wraps Engine results for Snowl consumption |
| snowl_compat.py | Lightweight shim | Thin compatibility layer with minimal dependencies |
| InstalledAgent | Snowl-managed deployment | Agent packaged as a Snowl plugin with lifecycle hooks |
Engine Configuration Export
Engine.export_config() returns an EngineConfig snapshot capturing the agent’s runtime configuration:
EngineConfig Fields
| Field | Type | Description |
|---|---|---|
agent_name | str | Name of the agent module |
model_id | str | Resolved model identifier |
budget_max_steps | int | Maximum step budget |
budget_max_runtime_seconds | float | None | Runtime budget |
budget_max_tokens | int | None | Token budget |
critic_names | list[str] | Names of attached critics |
stop_criteria_names | list[str] | Names of stop criteria |
has_checkpoint_store | bool | Whether checkpointing is enabled |
has_tracing_provider | bool | Whether tracing is enabled |
protocol_id | str | None | Prompt protocol identifier |
delegate_depth | int | Current delegation depth |
has_shared_memory | bool | Whether shared memory is attached |
has_env | bool | Whether an environment is attached |
tool_count | int | Number of registered tools |
Tool Permission Export
ToolRegistry.export_permissions() returns a list of ToolPermissionSpec objects describing each tool’s capability and safety profile:
ToolPermissionSpec Fields
| Field | Type | Description |
|---|---|---|
name | str | Tool name |
description | str | Tool description |
permissions | ToolPermission | Network, filesystem, subprocess flags |
needs_approval | bool | Whether human approval is required |
read_only | bool | Whether the tool only reads (no side effects) |
concurrency_safe | bool | Whether the tool can run in parallel |
required_ops | list[str] | Required operations |
Critic Trace Extraction
EngineResult includes critic_traces — a list of CriticTrace records from every critic evaluation during the run:
CriticTrace Fields
| Field | Type | Description |
|---|---|---|
step_id | int | Step where the critic fired |
critic_name | str | Name of the critic |
action | str | "continue", "stop", or "retry" |
reason | str | Human-readable reason |
score | float | Numeric score (0–1) |
details | dict | Additional structured data |
instruction_patch | str | None | Suggested instruction modification |
state_patch | dict | None | Suggested state modification |
Manual Extraction from StepRecords
If you have rawStepRecord.critic_outputs instead of EngineResult:
Handoff Trace Extraction
EngineResult includes handoff_traces — a list of HandoffTrace records from every agent handoff during the run:
HandoffTrace Fields
| Field | Type | Description |
|---|---|---|
step_id | int | Step where the handoff occurred |
from_agent | str | Source agent name |
to_agent | str | Target agent name |
context_strategy | str | "ISOLATED", "SUMMARY", or "FULL" |
messages_passed | int | Number of messages transferred |
Manual Extraction from RuntimeEvents
End-to-End Example
Develop an agent in QitOS, then evaluate it in Snowl:Conformance Testing
QitOS ships conformance tests that verify all export APIs produce correct, serializable output. Run them with:EngineConfigfield completeness and JSON serializationToolPermissionSpecfield mapping and serializationCriticTraceextraction and round-trip serializationHandoffTraceextraction and round-trip serialization- Combined
EngineResultwith all trace types
