Skip to main content

A Tour

The quickstart agent could answer and call a tool. This tour gives an agent what it needs before it is allowed to act: a policy that asks a person before a refund, a sandbox where its commands run, a budget it cannot overspend — and the record of each.
About fifteen minutes and a few cents of model usage. Part 2 needs Docker running and pip install "omnicoreagent[docker]". Every output shown is what the code printed; the model’s wording will differ on your run, the statuses, calls and numbers will not.

1. Ask a person before a refund

A policy decides, for every capability the agent has, whether to allow it, deny it, or ask a person. Start from a built-in profile and add one rule: refunds are asked about.
The built-in profiles. interactive-dev allows your local tools, the workspace, memory, skills, code mode and sandboxed commands; it asks before commands outside a sandbox, network access, package installs, MCP tools, sub-agents and background runs; and it denies reading raw secrets. permissive-dev allows sub-agents and background runs outright, and denies unsandboxed commands, host files, network access and package installs instead of asking. strict-production allows nothing but its own telemetry without a rule of yours. See the security model.
What happened:
  • The run paused at the refund — status awaiting_approval — with the exact call it wanted to make. Nothing was refunded until someone decided.
  • resolve_approval recorded who decided. decision="deny" with a note sends the model the reason instead; arguments={...} approves an edited call.
  • resume continued the run where it stopped. It can happen minutes or days later, in another process: the run’s record is durable.
  • A run can pause again after a resume — once for each call that needs a person — so approve in a loop until the status is no longer awaiting_approval. A session_id is optional; the run makes one.
  • The story of the run has a segment for each stretch between pauses — here two — and story["tool_calls"] lists every call with how it finally ended. Each segment’s own trajectory has the details, including the policy decision behind every call.
Over HTTP, OmniServe exposes the same flow: approvals, decisions and resume are endpoints.

2. Run commands in a sandbox

Turn on a sandbox provider and the agent gets an execute tool. Its commands run inside the sandbox — never on your machine, never with your credentials.
Every command the agent ran, with its exit code and where it ran, is in the record. Docker, E2B, Modal, Daytona and Vercel sandboxes are one line of configuration each (sandbox providers).

3. Put a price on it

A budget caps what a run, a session, an agent or the whole application may spend. The runtime holds a model call’s worst-case cost before making it, so a limit cannot be overshot. Here, a limit far too small:
The run stopped before spending anything and waited. grant_budget is a recorded, one-off exception with a name on it — the policy itself is unchanged — and resume carried on. To end the run instead, deny_budget.

What you have now

An agent that can act, and a record that says what it did and why it was allowed to. From here:

Security model

Profiles, rules, targets, and what every capability means.

Durable runs

Pauses, crashes and resumes; budgets in full.

Execution

The execute tool, the workspace bridge, sandboxes that die.

Every run is evidence

Trajectories, outcomes, training records, exporters.