When real files are needed
async with skills.snapshot() as batch:
async with batch.materialize() as directory:
# Give this path to a framework or awaited subprocess.
# The child process must finish before leaving this block.
print(directory)
This exports a complete private copy into a temporary directory, preserving read/execute modes. It does not create a FUSE mount or writable hardlinks to shared objects. It rejects paths incompatible with supported platforms, including case-folding collisions. Cleanup occurs on exit. File modes are not sandbox isolation against the owning process. Direct reads of exported files bypass SDK authorization; revocation cannot recall exported bytes. New snapshots require new exports, never rewriting an old directory.
Choose an integration
| Scenario | Integration | Boundary |
|---|---|---|
| You control model requests and tools | SDK catalog and loading APIs | Host injects discovery; Pydantic AI has a built-in adapter |
| Framework requires a directory | snapshot().materialize() | Fixed private copy, cleaned on exit; new versions need new directories |
| Agent only accepts a Skill search path | Linux FUSE | File updates do not automatically replace the model's Skill list |
Agno and LangChain
There are no built-in Agno or LangChain adapters yet. If the framework accepts a local directory, pass the exported path and complete the entire task inside its context; this alone does not guarantee the framework refreshes its Skill index. Updating discovery during a run requires refreshing and injecting catalog text in the framework's model-request hook, plus wrapping the version-checked loading tools. Pydantic AI test results do not certify other frameworks.
Continue reading
Python SDK quickstart · Snapshots and update policies · Pydantic AI integration · SDK reference and testing