Skip to main content

What is a Profile?

A Profile is the blueprint for an agent. It captures:
  • Which LLM runtime and model to use
  • What the agent’s persona and instructions are (system prompt)
  • Which tools the agent is allowed to call
  • Which external MCP servers the agent can access
Profiles are reusable templates — one profile can back many concurrent sessions. Editing a profile never affects sessions that are already running.

Profile Schema


Creating a Profile

Most operators create and edit profiles in the dashboard. The API and generated SDKs use the same schema for automation, tenant onboarding, and tests.

Runtime Selection

The runtime field determines which agent-worker mode handles runs for this profile.
Use runtime: "general" when you want to switch providers without changing your runner infrastructure. Use runtime: "claude" when you need native Claude features like extended thinking or citations.

Worker Placement

workerMode selects how the runner reaches the agent-worker without changing the profile’s runtime or model behavior: Sandbox workers are launched lazily on the session’s first run, reused by later runs, and closed when the session shuts down. The runner must have WORKER_TOKEN_HMAC_KEY and a worker substrate configured, or an operator must launch the worker out of band. See Dynamic sandbox workers for runner configuration. For sandbox workers, workerSubstrate explicitly selects e2b, daytona, docker, or process. When omitted, Orca prefers the profile’s sandbox.provider if the runner serves it, then falls back to that runner’s default substrate. An explicit substrate that no runner serves is not rejected when the profile is saved; session placement fails with the fleet’s available substrates instead. workerImage overrides the runner’s image for the selected substrate: an E2B template id, Daytona snapshot name, or Docker image reference. Because those artifacts are not interchangeable, set workerSubstrate and workerImage together or leave both unset. On profile reads, a pooled Conductor may add workerPlacement with the resolved substrate, its source (explicit, shell, default, or unknown), whether it is servable, and explanatory requested or detail fields when needed. This value reflects the live fleet, is absent for static profiles, and is ignored rather than persisted when supplied on create or update.

Tool Selectors

The tools array controls which platform tools the agent can invoke. Four forms are supported:

1. Named Tools

Include specific tools by name:

2. Capability Sentinels

Expand all tools in a capability group:

3. Wildcard Patterns

Pattern-match tool names:
This matches web_search and web_extract.

Empty = Defaults

An omitted or empty array grants the curated default set (equivalent to ["@default"]).
Raw artifact tools (@artifacts), Memory Bank tools (@memory), and orchestration tools (@orchestration) are not in @default. Web tools currently sit under @introspection; without TAVILY_API_KEY, they return a tool-level “not configured” error.

Skills

The skills array names instruction bodies from the conductor skill store (see Skills). Profile create and update requests reject confirmed unknown skill names with 400 Bad Request, so use the dashboard picker or GET /api/skills before attaching them. In Postgres-backed conductor deployments, validation uses the tenant-scoped skill store that backs the dashboard skill list. In local no-DB mode, validation falls back to the in-memory skill catalog; if no catalog is available, Orca skips validation so degraded local setups can still register profiles. At run dispatch, the conductor resolves the validated names and sends the matched skill bodies, Agent Skills metadata, and resource manifests to the worker. Skills with executable scripts/ resources are marked requiresSandbox; their scripts execute through the runner’s run_skill_script tool inside the session sandbox. Tool capability selectors also auto-attach matching platform skills. For example, a profile with @vfs receives using-vfs, and an omitted or empty tools array receives the using-* skills for the @default bundle. In Postgres deployments, the conductor first reconciles the tenant’s platform-skill rows; a tenant-scoped tombstone keeps an intentionally deleted seed absent. Any auto-attached name that remains missing is skipped silently.

MCP Servers and Connected Apps

Profiles can attach inline external MCP servers or grant access to provider-managed connected apps (see MCP Integration). Inline servers are sent to the sidecar during a run:
Header values prefixed with ${VAR} are resolved from the runner’s environment before the run envelope is sent to the sidecar. Unresolved secrets never reach the sidecar or appear in logs.
Connected apps use credential-free catalog references instead:
Managed references authorize search_connected_app_tools and call_connected_app_tool. They are omitted from the worker’s native MCP transport configuration, and must not include transport, url, or headers.

MCP Server Spec


Filesystem Policy

Every profile gets an implicit home directory at /agents/{self}/** with read/write/delete access. The optional fs field adds more grants or denies:
delete defaults to write when omitted. deny is a hard override. Pool membership can add more access under /pools/{pool}/...; see Agent Pools. When the runtime has a per-session VirtualFS manager, session creation also allocates a VirtualFS session. fs.allow_mounts is the explicit mount-prefix allowlist for that lease. If it is omitted, Orca derives the allowlist from the first path segment of the profile’s read, write, and delete globs. If no mount prefixes can be derived, the VFS lease is unrestricted. In the dashboard profile editor, enabling Limit to specific mounts under File access also adds the @vfs tool selector automatically so the profile receives vfs_execute and vfs_grep. API clients that set fs.allow_mounts directly should include @vfs in tools when the agent needs those VirtualFS tools.

Default Seed Profile

Every fresh deployment includes a general profile:
This is what you see in the Workbench out of the box.
The seeded profile still carries the legacy web.* selector. The current web tool names are web_search and web_extract; @default selects them today because they carry the introspection capability. New explicit web selectors should use exact names or web_*.

Managing Profiles via API

Deleting a profile does not terminate existing sessions. Sessions hold a snapshot of their profile at creation time.

Profile Examples

Set AGENT_ORC_ORCHESTRATION_TOOLS=off on the runner to remove orchestration tools entirely in restricted environments.