import asyncio
import os
import sys
from agents import Runner
from agents.run import RunConfig
from agents.sandbox import SandboxAgent, SandboxRunConfig
from declaw.openai import (
DeclawSandboxClient,
DeclawSandboxClientOptions,
InjectionDefenseConfig,
PIIConfig,
SandboxNetworkOpts,
SecurityPolicy,
)
async def main() -> None:
options = DeclawSandboxClientOptions(
template="python",
timeout=300,
security=SecurityPolicy(
pii=PIIConfig(enabled=True, action="redact"),
injection_defense=InjectionDefenseConfig(enabled=True, sensitivity="medium"),
),
network=SandboxNetworkOpts(
allow_out=["api.openai.com", "pypi.org", "files.pythonhosted.org"],
),
)
client = DeclawSandboxClient()
session = await client.create(options=options)
try:
agent = SandboxAgent(
name="quickstart",
model="gpt-5.4",
instructions="You are a helpful coding agent.",
)
result = await Runner.run(
agent,
"Create /workspace/notes.md with 'hello from declaw', then "
"run `wc -c /workspace/notes.md` and report the byte count.",
run_config=RunConfig(sandbox=SandboxRunConfig(session=session)),
)
print(result.final_output)
finally:
await client.delete(session)
if __name__ == "__main__":
asyncio.run(main())