401 lines
12 KiB
Markdown
401 lines
12 KiB
Markdown
# Agent YAML spec
|
|
|
|
Omnigent can run an agent from a single YAML file:
|
|
|
|
```bash
|
|
omnigent run path/to/agent.yaml
|
|
```
|
|
|
|
Use this file to choose the harness/model, write the system prompt, and declare
|
|
which tools, sub-agents, OS access, and policies the agent can use.
|
|
|
|
## Minimal agent
|
|
|
|
```yaml
|
|
name: hello_agent
|
|
prompt: |
|
|
You are a concise assistant. Answer directly and ask a follow-up question when
|
|
the request is ambiguous.
|
|
|
|
executor:
|
|
harness: claude-sdk
|
|
model: databricks-claude-sonnet-4-6
|
|
auth:
|
|
type: databricks
|
|
profile: oss
|
|
```
|
|
|
|
`prompt` may also be replaced by `instructions: AGENTS.md`; relative paths are
|
|
resolved from the YAML file's directory.
|
|
|
|
## Common top-level fields
|
|
|
|
| Field | Required? | Purpose |
|
|
| --- | --- | --- |
|
|
| `name` | Recommended | Stable identifier shown in sessions and logs. |
|
|
| `prompt` | Usually | Inline system prompt. |
|
|
| `instructions` | Optional | Inline instructions or a path to an instructions file. If set, it takes precedence over `prompt`. |
|
|
| `executor` | Recommended | Harness, model, and auth settings. |
|
|
| `tools` | Optional | MCP tools, Python function tools, sub-agents, handoffs, or inherited tools. |
|
|
| `policies` | Optional | Guardrails that inspect requests, responses, tool calls, or tool results. |
|
|
| `params` | Optional | Typed user parameters available to tools/skills. |
|
|
| `os_env` | Optional | Enables local OS tools such as file reads, writes, edits, and shell commands. |
|
|
| `terminals` | Optional | Named interactive terminal environments the agent can launch. |
|
|
| `async` | Optional | Whether async work tools are exposed. Defaults to `true`. |
|
|
| `cancellable` | Optional | Whether the session can be cancelled. Defaults to `true`. |
|
|
| `timers` | Optional | Whether timer tools are exposed. Defaults to `false`. |
|
|
|
|
## Executor
|
|
|
|
```yaml
|
|
executor:
|
|
harness: claude-sdk # claude-sdk, openai-agents, codex, cursor, kiro-native, pi, antigravity, qwen, kimi, copilot, hermes, ...
|
|
model: databricks-claude-opus-4-7
|
|
auth:
|
|
type: databricks
|
|
profile: oss # Databricks profile for model routing
|
|
```
|
|
|
|
Set the Databricks profile under `executor.auth`. The older top-level
|
|
`executor.profile` shorthand is legacy and should not be used in new specs.
|
|
|
|
The `cursor` harness (Cursor's `cursor-agent`) is the exception: it talks
|
|
only to Cursor's own backend and has no custom API base-URL, so the Databricks
|
|
gateway / `auth.type: databricks` does not apply. Authenticate it with
|
|
`CURSOR_API_KEY` (or a prior `cursor-agent login`), optionally pinned via
|
|
`auth: {type: api_key, api_key: ${CURSOR_API_KEY}}`, and choose a Cursor model
|
|
id (e.g. `auto`, `gpt-5`) rather than a `databricks-*` id.
|
|
|
|
The `kiro-native` harness is the native Kiro CLI terminal path used by
|
|
`omnigent kiro`. It requires `kiro-cli` on `PATH` and Kiro's own login/auth; it
|
|
does not use Databricks, OpenAI, or Anthropic provider credentials. Plain
|
|
`harness: kiro` is not a generic Omnigent harness id. Kiro's TUI remains the
|
|
authoritative approval surface; supported one-time tool approvals can also be
|
|
mirrored into Chat cards, while persistent trust choices remain explicit Kiro
|
|
TUI/flag actions. See `kiro-native-elicitation.md`.
|
|
|
|
### Antigravity (Gemini)
|
|
|
|
`harness: antigravity` runs the agent through Google's
|
|
[Antigravity SDK](https://pypi.org/project/google-antigravity/)
|
|
(`pip install "omnigent[antigravity]"`). It defaults to **Gemini 3.5 Flash**
|
|
and can also drive Claude / GPT-OSS. Authenticate with an Antigravity /
|
|
Gemini API key, or Vertex AI (`project` / `location`) — the SDK is
|
|
Gemini-native and has no OpenAI-compatible gateway / Databricks path.
|
|
|
|
```yaml
|
|
executor:
|
|
harness: antigravity # aliases: agy, google-antigravity
|
|
model: gemini-3.5-flash
|
|
auth:
|
|
type: api_key
|
|
api_key: ${GEMINI_API_KEY} # or ANTIGRAVITY_API_KEY
|
|
```
|
|
|
|
### GitHub Copilot
|
|
|
|
`harness: copilot` runs the agent through the
|
|
[GitHub Copilot SDK](https://pypi.org/project/github-copilot-sdk/)
|
|
(`pip install "omnigent[copilot]"`). The SDK bundles the Copilot CLI it drives
|
|
as a backing server, so no separate CLI install is needed. Like cursor and
|
|
antigravity it talks only to GitHub's Copilot backend — there is no Databricks
|
|
gateway / `auth.type: databricks` path. Authenticate with a **GitHub token** that
|
|
carries Copilot access: a fine-grained PAT with the "Copilot Requests"
|
|
permission, or an OAuth token from the GitHub CLI (`gh auth token`) / Copilot
|
|
CLI. Resolution: spec `auth.api_key` → a token registered via `omnigent setup`
|
|
(the `copilot:` config block) → ambient `COPILOT_GITHUB_TOKEN` / `GH_TOKEN` /
|
|
`GITHUB_TOKEN`. Choose a Copilot model id (e.g. `claude-haiku-4.5`, `gpt-5-mini`,
|
|
or omit for auto-select) rather than a `databricks-*` id. Classic `ghp_` PATs are
|
|
not accepted by Copilot.
|
|
|
|
```yaml
|
|
executor:
|
|
harness: copilot # alias: github-copilot
|
|
model: claude-haiku-4.5 # a Copilot model id; omit for auto-select
|
|
auth:
|
|
type: api_key
|
|
api_key: ${GH_TOKEN} # a GitHub token with Copilot access
|
|
```
|
|
|
|
To route through OpenRouter / a gateway, declare a key/gateway provider in
|
|
`~/.omnigent/config.yaml` and reference it (`auth: {type: provider, name: …}`),
|
|
or set `auth.base_url` to the OpenAI-compatible endpoint alongside the key.
|
|
For Databricks, use `auth: {type: databricks, profile: …}`.
|
|
|
|
### Kimi Code
|
|
|
|
`harness: kimi` runs the agent through Moonshot AI's
|
|
[Kimi Code CLI](https://github.com/MoonshotAI/Kimi-Code) headlessly via
|
|
`kimi --print --output-format stream-json` per turn. Install the binary
|
|
with `curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`
|
|
and authenticate once with `kimi login` (OAuth or a Moonshot API key).
|
|
|
|
```yaml
|
|
executor:
|
|
harness: kimi # alias: kimi-code
|
|
model: kimi-k2-turbo
|
|
```
|
|
|
|
By default Kimi authenticates against Moonshot AI's backend — Omnigent
|
|
declares no `executor.auth` block. To route through a gateway, either set
|
|
`HARNESS_KIMI_GATEWAY_BASE_URL` + `HARNESS_KIMI_GATEWAY_API_KEY` in the
|
|
shell, declare a key/gateway provider in `~/.omnigent/config.yaml`, or use
|
|
`executor.auth: {type: databricks, profile: …}` and let Omnigent resolve
|
|
the workspace.
|
|
|
|
CLI flags such as `--harness` and `--model` can override or supply missing
|
|
executor values for a run. Databricks credentials come from the spec's
|
|
`executor.auth` block or your `omnigent setup` provider config — there is
|
|
no profile flag.
|
|
|
|
## Qwen Code
|
|
|
|
`harness: qwen` runs the agent through [Qwen Code](https://github.com/QwenLM/qwen)
|
|
(`npm install -g @qwen-code/qwen-code`). It drives the `qwen` CLI in ACP mode
|
|
(`qwen --acp`).
|
|
|
|
```yaml
|
|
executor:
|
|
harness: qwen # aliases: qwen-code
|
|
model: qwen/qwen-2.5-coder
|
|
```
|
|
|
|
CLI flags such as `--harness qwen` and `--model <id>` can override or supply
|
|
missing executor values.
|
|
|
|
## Local OS access
|
|
|
|
Declare `os_env` only for agents that need local file/shell tools.
|
|
|
|
```yaml
|
|
os_env:
|
|
type: caller_process
|
|
cwd: .
|
|
sandbox:
|
|
type: linux_bwrap
|
|
write_paths:
|
|
- .
|
|
allow_network: true
|
|
```
|
|
|
|
For trusted local development, examples may use `sandbox.type: none`:
|
|
|
|
```yaml
|
|
os_env:
|
|
type: caller_process
|
|
cwd: .
|
|
sandbox:
|
|
type: none
|
|
```
|
|
|
|
Prefer the narrowest filesystem and network access that supports the task. Do
|
|
not pass secrets through the environment unless the tool genuinely needs them.
|
|
|
|
You usually don't need to choose a `sandbox.type` — omit it and Omnigent picks
|
|
the platform default (`linux_bwrap` on Linux, `darwin_seatbelt` on macOS), so the
|
|
same YAML works across platforms. For the full set of sandbox options, how to
|
|
share one policy across `sys_os_*` and terminals, and how to set up network
|
|
egress rules, see the `sandbox:` examples below and the sandbox source under `omnigent/inner/`.
|
|
|
|
## Tools
|
|
|
|
Tools are declared under `tools` by name.
|
|
|
|
### MCP server
|
|
|
|
```yaml
|
|
tools:
|
|
github:
|
|
type: mcp
|
|
command: uv
|
|
args:
|
|
- run
|
|
- python
|
|
- -m
|
|
- my_package.github_mcp
|
|
tools:
|
|
- search_issues
|
|
- get_pull_request
|
|
```
|
|
|
|
MCP tools can also point at a remote URL:
|
|
|
|
```yaml
|
|
tools:
|
|
docs:
|
|
type: mcp
|
|
url: https://example.com/mcp
|
|
headers:
|
|
Authorization: Bearer ${TOKEN}
|
|
```
|
|
|
|
### Python function tool
|
|
|
|
```yaml
|
|
tools:
|
|
summarize_file:
|
|
type: function
|
|
description: Summarize a local text file.
|
|
callable: my_package.tools.summarize_file
|
|
parameters:
|
|
type: object
|
|
properties:
|
|
path:
|
|
type: string
|
|
required: [path]
|
|
```
|
|
|
|
For client-provided tools, use `runtime: client` and do not set `callable`.
|
|
|
|
### Tool sandbox containers
|
|
|
|
Local Python tools can run inside a container image by declaring a sandbox image.
|
|
Use `container_image` for new specs; `docker_image` remains accepted as a
|
|
deprecated alias for backwards compatibility. Set `container_runtime: podman` to
|
|
run the image with Podman instead of Docker.
|
|
|
|
```yaml
|
|
tools:
|
|
sandbox:
|
|
container_image: python:3.12-slim
|
|
container_runtime: podman # optional; defaults to docker
|
|
```
|
|
|
|
### Sub-agent tool
|
|
|
|
```yaml
|
|
tools:
|
|
reviewer:
|
|
type: agent
|
|
description: Review proposed code changes.
|
|
prompt: |
|
|
You are a careful code reviewer. Focus on correctness, tests, security,
|
|
and maintainability.
|
|
executor:
|
|
harness: claude-sdk
|
|
model: databricks-claude-sonnet-4-6
|
|
os_env: inherit
|
|
pass_history: true
|
|
max_sessions: 2
|
|
```
|
|
|
|
Each sub-agent picks its own `executor.harness` and `model`, so an orchestrator
|
|
can mix harnesses by role — e.g. a `cursor` coder with a `claude-sdk`
|
|
reviewer:
|
|
|
|
```yaml
|
|
tools:
|
|
coder:
|
|
type: agent
|
|
executor:
|
|
harness: cursor # Cursor model id (e.g. gpt-5, auto), not a databricks-* id
|
|
model: gpt-5
|
|
```
|
|
|
|
Use `tools.<name>: inherit` to inherit a tool from a parent agent, or
|
|
`tools.<name>: self` / `spec: self` for a sub-agent that clones the parent spec.
|
|
|
|
## Policies
|
|
|
|
Policies can inspect requests, responses, tool calls, and tool results.
|
|
|
|
```yaml
|
|
policies:
|
|
pii_guard:
|
|
type: function
|
|
handler: my_package.policies.pii_guard
|
|
on: [request, response]
|
|
```
|
|
|
|
A factory can be configured with `factory_params`:
|
|
|
|
```yaml
|
|
policies:
|
|
workspace_policy:
|
|
type: function
|
|
handler: my_package.policies.make_workspace_policy
|
|
factory_params:
|
|
allowed_hosts:
|
|
- example.cloud.databricks.com
|
|
```
|
|
|
|
## Terminals
|
|
|
|
Terminals are named interactive shell environments that the agent can launch.
|
|
|
|
```yaml
|
|
terminals:
|
|
bash:
|
|
command: bash
|
|
args: [-l]
|
|
os_env: inherit
|
|
allow_cwd_override: true
|
|
allow_sandbox_override: false
|
|
scrollback: 10000
|
|
```
|
|
|
|
Use `os_env: inherit` to give the terminal the same sandbox as the agent, or
|
|
alias a shared `sandbox:` block so `sys_os_*` and the terminal enforce the same
|
|
policy. Keep `allow_sandbox_override: false` unless you intend to let the
|
|
launcher weaken the sandbox at launch time.
|
|
|
|
## Complete example
|
|
|
|
```yaml
|
|
name: coding_agent
|
|
prompt: |
|
|
You are a coding agent. Inspect files before editing, run targeted tests, and
|
|
summarize changes with validation results.
|
|
|
|
executor:
|
|
harness: claude-sdk
|
|
model: databricks-claude-sonnet-4-6
|
|
auth:
|
|
type: databricks
|
|
profile: oss
|
|
|
|
async: true
|
|
cancellable: true
|
|
|
|
os_env:
|
|
type: caller_process
|
|
cwd: .
|
|
sandbox:
|
|
type: linux_bwrap
|
|
write_paths: [.]
|
|
allow_network: true
|
|
|
|
terminals:
|
|
zsh:
|
|
command: zsh
|
|
args: [-l]
|
|
os_env: inherit
|
|
allow_cwd_override: true
|
|
|
|
tools:
|
|
repo_search:
|
|
type: function
|
|
description: Search repository files for a pattern.
|
|
callable: my_package.tools.repo_search
|
|
parameters:
|
|
type: object
|
|
properties:
|
|
query:
|
|
type: string
|
|
required: [query]
|
|
```
|
|
|
|
## Validation tips
|
|
|
|
- Keep examples free of secrets, workspace URLs, customer data, and private
|
|
Databricks-only configuration unless the example is explicitly internal.
|
|
- Prefer `instructions: AGENTS.md` for long prompts that are shared with other
|
|
tooling.
|
|
- Start from a bundled example such as `examples/polly/config.yaml` or
|
|
`examples/debby/config.yaml` and remove tools you do not need.
|
|
- Run the YAML before publishing it:
|
|
|
|
```bash
|
|
omnigent run path/to/agent.yaml -p "Say hello"
|
|
```
|