Skip to main content
Evals let you run your Managed Deep Agent against checked-in Harbor tasks in isolated environments. Managed Deep Agents compiles your agent into a Harbor-ready artifact; you run trials with Harbor yourself (local Docker by default, or another Harbor environment you configure). Each task describes what the agent should do, Harbor runs the compiled agent once, then grades the result with a Harbor verifier.
Managed Deep Agents is in private beta, available on LangSmith Cloud in the US region only. Join the waitlist to request access.

Prerequisites

  • A Managed Deep Agents project created with mda init (or an existing project that already has an agent entry).
  • Harbor tasks under evals/ (scaffold with mda evals init if needed).
  • Docker running locally when using Harbor’s default docker environment.
  • Model credentials in the project .env or your shell (for example OPENAI_API_KEY for openai:… models).
  • The mda CLI from managed-deepagents (same install as CLI reference).
  • Harbor on your PATH, or uv so you can run uv run --with harbor ….

Concepts

Scaffold tasks

From your project root:
With no path (or with evals), the command creates starter tasks under evals/ when that directory does not already exist. mda init also scaffolds starter evals for new projects. To add one more task later:

Task layout

Each task is a Harbor task directory under evals/. The layout matches Harbor’s task structure:

Instruction

instruction.md is the natural-language task description Harbor shows the agent. Keep it specific and verifiable.

Verifier

After the agent finishes, Harbor grades the trial by running your verifier script: tests/test.sh on Linux (or tests/test.bat on Windows). Inside the container that grades the run, paths look like this: Your script inspects /app (or other outputs), then must write a reward file: Use either format. Harbor accepts both. Prefer absolute paths (/app/..., /tests/...) so the script does not depend on the working directory. You can implement checks in shell, call a test runner, or run custom grading logic—as long as the reward file is written. Minimal example:
For multi-metric rewards, verifier env vars in task.toml, and LLM-as-a-judge patterns, see Harbor’s task structure and LLM-as-a-judge docs.

Identity-aware projects

If the project exports identity (identity.ts or identity.py), every eval task must include identity.json. Scaffolding adds a default fixture automatically. Customize the fixture when your agent or tests depend on a specific actor, tenant, or claims.
identity.json
The fixture is injected as the trial identity envelope. It is not left under /app as an agent-writable file.

Compile a Harbor handoff

From your project root:
Compile requires at least one Harbor task under evals/ (a subdirectory with instruction.md and tests/). It writes a handoff under .mda/evals/: Optional compile flag: .mda/evals/ is local output. Do not commit it, and it is not part of the deploy archive.

Run trials with Harbor

mda evals compile prints a copy-pasteable Harbor command. From the project root:
If harbor is already on your PATH, the printed command uses harbor run directly instead of uv run --with harbor. Edit .mda/evals/harbor-job.json to change tasks, model, environment type, concurrency, or attempts. Harbor owns trial orchestration, backends, and reporting—not the mda CLI. For Harbor flags and job config fields, see the Harbor docs. Re-run mda evals compile after you change the agent or want a fresh example job config (each compile uses a new Harbor jobs directory under .mda/evals/harbor-jobs/).

Sandbox setup scripts

If the project has sandbox/setup.sh, the Managed Deep Agents Harbor adapter runs it once while preparing the trial environment (with bash, so bashisms such as set -o pipefail are supported). Authored sandbox provider config is ignored during evals; the trial environment owns isolation.

Next steps