The agent file is now a package.
Docker Agent defines an agent in YAML or HCL. One file can name models, instructions, tools, Model Context Protocol servers, retrieval sources, permissions, hooks, skills, and sub-agents. The command runs as a Docker CLI plugin or as a standalone binary.[1]
Version 1.149.0 landed on October 7. It adds public GitHub repository URLs as skill sources. It also adds an evaluator backend, routes evaluators through the models gateway, and fixes service-tier pricing based on the tier the provider actually served.[2]
Once an agent file can carry tools, policy, and dependencies, review it like runnable infrastructure.
Start with custody, not syntax.
Docker Agent can push an agent file to an OCI-compatible registry and run it by tag or digest. Its signing flow authenticates the YAML bytes and the published reference. The documentation also states what the signature does not cover. Several manifest annotations remain outside that proof.[6]
A tag is convenient, but it can move. Pin the digest when rollback protection matters. Record the source before opening the tool lane. A signed file proves who held a key. It does not prove that the file deserves access to your repository.
Policy and isolation do different jobs.
The permissions system has strict, balanced, restricted, and autonomous safety modes. Deny rules take priority over allow rules. The restricted mode fails closed for unattended work, but Docker's documentation says it is defense in depth rather than a security boundary.[3]
The sandbox path runs the agent in a Docker sandbox virtual machine. A local sandbox mounts the current working directory read-write. Other configuration paths can be read-only, but files exposed through any mount remain available to the agent. The sandbox narrows placement. The permission rules decide which tools may act.[4]
That split matters. A safe-looking policy on the host does not create isolation. A sandbox with a broad writable mount does not create a narrow task.
Put a real meter on the run.
Docker Agent can cap cost, cumulative tokens, and working time. Named budgets form shared pots across every agent that references the name. The run-wide budget also includes sub-sessions and compaction calls.[5]
The limits are checked between turns. A call or tool already in flight can overshoot before the runtime stops. Cost limits also depend on pricing data. An unpriced model contributes no amount unless the configuration supplies custom pricing.
A budget is a stop condition, not a forecast. Save the configured ceiling and the observed termination record. Do not turn a zero-dollar counter from an unpriced model into a free-run claim.
Use this intake card.
- Record the source URL, revision, tag, and digest.
- Read the agent file before running it. List every tool, skill source, hook, model route, and writable path.
- Choose the execution host and sandbox route. Name each mount and allowed network host.
- Set user-owned safety defaults. Treat author-declared defaults as untrusted input.
- Set cost, token, and working-time ceilings with room for one in-flight turn.
- Run one denied action and one allowed read before the real workload.
- Save the exact config, runtime version, result, stop reason, and cleanup proof.
AGENT MANIFEST INTAKE SOURCE=[URL + REVISION] ARTIFACT=[TAG + DIGEST] EXECUTION_HOST=[HOST OR SANDBOX] WRITABLE_PATHS=[EXACT PATHS] NETWORK_ALLOWLIST=[EXACT HOSTS] SAFETY_MODE=[STRICT / BALANCED / RESTRICTED] DENY_TEST=[COMMAND + RESULT] BUDGET=[COST + TOKENS + WORKING TIME] RUNTIME_RECEIPT=[VERSION + RESULT + STOP REASON] STATUS=[TEMPLATE ONLY / RUN NOT VERIFIED]