---
title: "What Is Databricks Omnigent Meta-Harness?"
url: "https://atlan.com/know/ai-agent/databricks/what-is-databricks-omnigent-meta-harness/"
description: "Learn what the Databricks Omnigent meta-harness is, how its uniform API, policies, and server work, where it stops, and how a context layer fills the gap."
author: "Kovid Rathee"
author_role: "Head of Solution Architecture, Data & AI, Nexifi"
published: "2026-10-06"
updated: "2026-10-06"
---

> Atlan is hosting Context Conference, bringing together the leaders and builders at the frontier of giving AI the context it needs to understand their business. It runs online on October 28, 2026, from 11:00 AM to 2:00 PM ET. Atlan co-founder Prukalpa Sankar opens and closes the day. Leaders from AstraZeneca, BNY and Verizon share why they invest in context and what they get from it. Registrants get early access to The AI Context Gap, a new study from MIT Technology Review Insights. Register: https://atlan.com/context-conference/

---

Omnigent decides which harness runs your agent and which policies apply to it. It does not decide what your agent knows about your business. Atlan's [context layer for AI agents](https://atlan.com/know/context-layer-for-ai-agents/) supplies that part, so the agent you define once in Omnigent reads the same governed definitions, lineage, and ownership whichever harness runs it.

### Pick an Agent Harness

Give it what you are building, your deployment model, and your governance needs. It returns a shortlist with the trade-off that decided each rank. [Read the skill](/skills/agent-harness-picker.md).

*Paste into a new chat*

```
Use the skill at https://atlan.com/skills/agent-harness-picker.md to pick an agent harness for my team. Ask me for whatever it needs.
```

*Run once in a terminal*

```
curl -fsSL --create-dirs \
  -o ~/.agents/skills/agent-harness-picker/SKILL.md \
  https://atlan.com/skills/agent-harness-picker.md
```

*For an agent*

```
curl -fsSL https://atlan.com/skills/agent-harness-picker.md
```


    Human
    Agent


  ClaudeChatGPTGeminiCursorOther
  Copy

.skp{margin:1.75rem 0;padding:1rem 1.125rem 1.125rem}
.skp h3{margin:0 0 .375rem!important;font-size:20px!important;line-height:24px!important;
 font-family:var(--font-funnel-display)!important;font-weight:600!important;color:#2B2B39!important}
.skp > p{margin:0 0 .875rem!important;font-size:14px!important;line-height:22px!important;color:#555572!important}
.skp > p a{color:#2026D2;text-decoration:underline}
.skp-box{margin-bottom:.75rem}
.skp-p em{display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
 color:#F34D77;font-style:normal;margin-bottom:.25rem}
.skp-p > p{margin:0!important}
#seo-layout article .skp .skp-p pre{margin:0!important;overflow-x:auto}
#seo-layout article .skp .skp-p pre code{color:#2B2B39!important;font-size:12px!important;line-height:19px;
 white-space:pre-wrap;overflow-wrap:anywhere;background:none;padding:0;
 font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.skp-p + .skp-p{margin-top:.625rem}
.skp-cs{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem}
.skp-seg{display:inline-flex;flex:0 0 auto;border:1px solid #DDDDE3;border-radius:999px;overflow:hidden;background:#fff}
.skp-m{min-height:32px;padding:.25rem .75rem;border:0;background:transparent;font-family:inherit;color:#77778E;cursor:pointer}
.skp-m:hover{color:#2026D2}
.skp-m.on{background:#2026D2;color:#fff}
.skp-sep{flex:0 0 auto;width:1px;height:20px;background:#DDDDE3;margin:0 .25rem}
.skp-tools{display:inline-flex;flex-wrap:wrap;gap:.375rem;min-width:0}
.skp-cp{margin-left:auto;min-height:32px;padding:.25rem .75rem;border-radius:999px;background:#fff;
 font-family:inherit;color:#555572;cursor:pointer}
.skp-cp:hover{border-color:#2026D2!important;color:#2026D2}
.skp-cs .skp-c{display:inline-flex!important;width:auto;flex:0 0 auto;align-items:center;gap:.375rem;
 min-height:32px;padding:.25rem .625rem;border-radius:999px;background:#fff;font-family:inherit;
 color:#555572;cursor:pointer}
.skp-cs .skp-c img{display:block!important;width:14px!important;height:14px!important;
 max-width:14px!important;flex:0 0 auto;opacity:.55;margin:0}
.skp-c:hover img,.skp-c.on img{opacity:1}
.skp-cs .skp-c:hover{border-color:#797DE4!important;color:#2026D2}
.skp-cs .skp-c.on{border-color:#2026D2!important;background:#F4F4FD;color:#2026D2}
.skp-agent .skp-tools,.skp-agent .skp-sep{display:none}

(function(){
  var p=document.querySelector('.skp[data-skill="agent-harness-picker"]');if(!p)return;
  var panes=p.querySelectorAll('.skp-p');
  function show(id){panes.forEach(function(x){x.hidden=x.dataset.skp!==id;});}
  function cur(){var a=p.querySelector('.skp-p:not([hidden]) pre code');return a?a.textContent:'';}
  show('prompt');
  p.querySelectorAll('.skp-p em').forEach(function(e){
    var par=e.parentElement;
    ((par.tagName==='P'&&par.textContent.trim()===e.textContent.trim())?par:e).hidden=true;
  });
  p.querySelectorAll('.skp-c').forEach(function(b){
    b.addEventListener('click',function(){
      p.querySelectorAll('.skp-c').forEach(function(x){var on=x===b;x.classList.toggle('on',on);x.setAttribute('aria-pressed',on);});
      show(b.dataset.skp);
    });
  });
  p.querySelectorAll('.skp-m').forEach(function(m){
    m.addEventListener('click',function(){
      var agent=m.dataset.skpMode==='agent';
      p.classList.toggle('skp-agent',agent);
      p.querySelectorAll('.skp-m').forEach(function(x){var on=x===m;x.classList.toggle('on',on);x.setAttribute('aria-pressed',on);});
      if(agent){show('agent');}else{var s=p.querySelector('.skp-c.on');show(s?s.dataset.skp:'prompt');}
    });
  });
  var c=p.querySelector('[data-skp-copy]');
  c.addEventListener('click',function(){
    navigator.clipboard.writeText(cur()).then(function(){
      c.textContent='Copied';setTimeout(function(){c.textContent='Copy';},1600);
    });
  });
})();

Omnigent combines three capabilities:

- **A uniform agent definition:** One YAML file describes the agent, and a single line selects the harness or model.
- **Stateful policies:** Rules remember what a session has done and decide whether the next tool call, LLM request, or file operation goes ahead.
- **A shared server:** One coordinator holds sessions, messages, tool calls, artifacts, skills, and authentication for every interface.

| | |
|---|---|
| **What it is** | An open-source meta-harness from Databricks, released under Apache 2.0 in June 2026 |
| **Status** | Alpha as open source; Beta as the managed Omnigent on Databricks |
| **Harnesses it runs** | Claude Code, Codex, Cursor, Pi, and custom agents, among others |
| **What it controls** | Agent definition, policies, sessions, and access surfaces |
| **What it does not supply** | Business definitions, lineage, ownership, and quality context |

---

## Why does a meta-harness matter when every team already has a favorite harness?

New agent harnesses keep arriving, and teams end up trying several. Some commit to one. Others refuse to tie their agents, skills, and policies to a single vendor's runtime, and that second group is who a meta-harness serves.

According to the [Databricks launch post](https://www.databricks.com/blog/introducing-omnigent-meta-harness-combine-control-and-share-your-agents) (2026), Omnigent is a layer above individual harnesses that combines three things: composing models and harnesses without rewriting code, enforcing stateful policies such as cost budgets and permissions at the meta-harness layer, and sharing live sessions by URL. The [open-source repository](https://github.com/omnigent-ai/omnigent) describes it as a common orchestration layer over Claude Code, Codex, Cursor, OpenCode, Hermes, Pi, and custom agents.

Omnigent touches several disciplines at once. It sits squarely in [harness engineering](https://atlan.com/know/what-is-harness-engineering/), it shapes the workflow side of what IBM defines as [loop engineering](https://www.ibm.com/think/topics/loop-engineering), and it gives you a place to wire in [context engineering](https://atlan.com/know/what-is-context-engineering/). To see where it fits, start with the harness itself.

---

## What is an agent harness, and what does a meta-harness add?

An [agent harness](https://atlan.com/know/what-is-an-agent-harness/) is everything that makes up an agent apart from the [large language model](https://atlan.com/know/what-is-a-large-language-model/). That covers prompts, instructions, skills, sessions, permissions, sandboxes, and runtimes. Each harness manages these in its own way, so moving an agent from one to another means rewriting parts of it.

### Why switch between harnesses at all?

Harnesses keep outdoing one another on cost, speed, and quality, so the right choice today may not be the right one next quarter. Building a harness well also pulls in several disciplines, and each one takes a different shape in every harness:

- [Prompt engineering](https://atlan.com/know/what-is-prompt-engineering/) decides how every turn or request is phrased.
- [Context engineering](https://atlan.com/know/context-engineering-for-ai-agents/) decides how the right knowledge reaches the agent when it needs it.
- Loop engineering decides how the [agent loop](https://atlan.com/know/ai-agent/what-is-an-agent-loop/) starts and how its workflow is controlled. IBM describes it as the practice of designing agentic workflows that iteratively guide agents toward user-defined goals with minimal human intervention.

A meta-harness hides those vendor-specific details. You define the agent once, point it at a harness, and apply policies on top. For a wider view of how harnesses compare with frameworks, see [agent harness vs. agent framework](https://atlan.com/know/ai-agent/agent-harness-vs-agent-framework/) and the [AI agent harness tools compared](https://atlan.com/know/best-ai-agent-harness-tools-2026/).

Other tools cover part of this ground. The Vercel AI SDK's [HarnessAgent](https://ai-sdk.dev/v7/docs/ai-sdk-harnesses/harness-agent) wraps a harness adapter behind the standard AI SDK agent interface, and you choose the harness in application code when you construct the agent. That solves the code-level swap. Omnigent adds the policy layer and the shared server on top of the swap.

---

## How does the Databricks Omnigent meta-harness work?

You describe each custom agent in a [YAML file](https://omnigent.ai/docs/use/custom-agents). The harness that runs it can change between Claude Code, Codex, Cursor, or Pi without touching the agent's skills, tools, prompt, or policies. Omnigent is open source, so you can run it locally or on your own infrastructure. [Omnigent on Databricks](https://docs.databricks.com/aws/en/omnigent/) is the managed version, which uses a Databricks-operated server that integrates with your workspace's identity provider.

The [quickstart](https://docs.databricks.com/aws/en/omnigent/quickstart) offers two hosts. A managed Databricks Sandbox runs the host in the cloud, and your own machine works too, though it is only available while the machine is powered on. In the sandbox, models route through your workspace's Foundation Model APIs over Unity Gateway, with no API keys to manage. For the governance side of that route, see [Unity AI Gateway](https://atlan.com/know/ai-agent/databricks/unity-ai-gateway/) and the Databricks description of [Unity Gateway](https://docs.databricks.com/aws/en/ai-gateway/), which extends governance to the runtime interactions between models, agents, MCP servers, and tools. The [Databricks Sandbox](https://docs.databricks.com/aws/en/compute/serverless/sandbox) is itself in Beta.

### What does the Omnigent server do?

The [shared server](https://omnigent.ai/docs/deploy/overview) persists every conversation, message, and tool call in a database, either Postgres or SQLite. It handles authentication through built-in accounts or OIDC and SSO. It also proxies [MCP](https://atlan.com/know/what-is-model-context-protocol/) tool calls with server-side policy enforcement. The same server exposes every session across the terminal, the web, native and mobile apps, and a REST API, so a session you start in a terminal can continue in the [web UI](https://omnigent.ai/docs/interact/web-ui).

### How do policies work?

[Contextual policies](https://omnigent.ai/docs/policies/overview) intercept every tool call, LLM request, and file operation, then allow it, ask for approval, or deny it. They are stateful: each policy keeps its own state across the session and decides based on what has already happened. Policies apply at three levels: per session, per agent configuration, and server-wide. The [built-in policies](https://omnigent.ai/docs/policies/builtin) fall into safety controls and cost controls, and you declare them in a `policies` block of the agent YAML. On Databricks, custom policies use Common Expression Language, and the [Databricks documentation](https://docs.databricks.com/aws/en/omnigent/) notes that custom Python policies are not supported there.

### Which choices shape an Omnigent session?

Two decisions decide how an Omnigent agent behaves:

1. **Execution mode.** [Direct mode](https://omnigent.ai/docs/build/harnesses/supported) lets Omnigent drive the agent's model and tools itself. Native TUI mode boots the vendor's own terminal UI in a pane and mirrors it back, so you keep the native feel and gain Omnigent's collaboration and policy layers.
2. **How you start the session.** In the [terminal](https://omnigent.ai/docs/interact/terminal), `omni claude` launches a built-in Claude Code agent with Omnigent's UI and needs no YAML. `omni run ` starts a custom agent from a directory containing a `config.yaml`, and the `--harness` flag overrides the harness at run time without editing the file.

Once a harness is running, you configure agents with prompts, instructions, tools, and policies.

---

## How do you configure an Omnigent agent for the right context?

Omnigent has its own [agent specification](https://github.com/omnigent-ai/omnigent/blob/main/docs/AGENT_YAML_SPEC.md) for custom agents and tools. The smallest useful agent needs a name, a prompt, and an executor. This one defines a topic researcher:

```yaml
name: topic_researcher
prompt: |
  You are a research agent. You take a topic and provide a brief
  summary of that topic in a structured manner.

executor:
  harness: claude-sdk
  model: claude-sonnet-4-6
```

Running it gives you a session similar to `omni claude`, with one difference: this agent is yours, so you can keep adding to it. Before you run an agent, check the quickstart prerequisites. The CLI needs Python 3.12 or later, Node.js 22 LTS, and tmux on macOS and Linux, and the Databricks version needs the Omnigent preview enabled for your workspace.

The spec lets you extend the agent with these blocks:

- **Executor:** The harness ID, such as `claude-sdk` or `openai-agents`, the model, an optional `reasoning_effort`, and `auth` settings.
- **Prompt or instructions:** Direct system instructions, or a pointer to a file such as AGENTS.md.
- **Tools:** Python functions, built-in tools, sub-agents, and [MCP servers](https://omnigent.ai/docs/build/tools), declared with a local command or a remote URL.
- **Policies:** The rules that inspect agent activity and govern tool calls.

The meta-harness defines the harness. The YAML defines the agent, its loop, and its instructions. What neither defines is business context. Unity Catalog is [the unified governance layer for data and AI built into Databricks](https://docs.databricks.com/aws/en/data-governance/unity-catalog/), and it gives an Omnigent agent on Databricks a governed view of the assets in your workspaces. Most enterprise questions reach further, into BI tools, orchestrators, documentation, and systems of record. Closing that gap takes a [data catalog built for AI](https://atlan.com/know/data-catalog-for-ai/) and an [enterprise context layer](https://atlan.com/know/what-is-context-layer/) that feeds agents whichever harness, SDK, or model they use. The [Omnigent vs. neutral context layer](https://atlan.com/know/ai-agent/databricks/databricks-omnigent-vs-neutral-context-layer/) comparison covers that split in depth, and the [Omnigent agent runtime](https://atlan.com/know/ai-agent/databricks/databricks-omnigent-agent-runtime/) page covers how the runtime executes agents.

---

## How does Atlan bring enterprise context to Omnigent?

Atlan is the [Context Layer for AI](https://atlan.com/context-layer/). It connects to Databricks and crawls [Unity Catalog metadata to build lineage](https://docs.atlan.com/apps/connectors/data-warehouses/databricks/how-tos/crawl-databricks), alongside the BI tools and other systems where an organization's knowledge lives. That knowledge reaches agents through the [Atlan MCP server](https://atlan.com/know/what-is-atlan-mcp/). According to [Atlan's documentation](https://docs.atlan.com/product/capabilities/atlan-ai/how-tos/atlan-mcp-overview), Atlan MCP is a hosted server that lets AI clients use Atlan as a context layer through the Model Context Protocol, so agents can search enterprise context, traverse lineage, and read governed definitions and glossaries.

Atlan assembles the context in three pieces:

- An [Enterprise Data Graph](https://atlan.com/know/what-is-the-enterprise-context-layer/) that stores assets of every type with their ownership, quality, lineage, and related metadata.
- An [Active Ontology](https://atlan.com/know/what-is-active-ontology/) that holds your organization's language: glossary terms, domains, and metrics.
- [Context Engineering Studio](https://atlan.com/context-engineering-studio/), where you build [Context Repos](https://atlan.com/know/ai-agent/context-repository-for-ai-agents/) for your agents, run evals against them, and deploy the best version.

An Omnigent agent reaches Atlan the way it reaches any MCP server. You declare Atlan as an `mcp` tool in the agent YAML with its remote URL, and only the tools you list are advertised to the model. On Databricks, there is a second route: an MCP Service is [a Unity Catalog securable that registers an external MCP server](https://docs.databricks.com/aws/en/agents/mcp-tools/mcp-services). Databricks says access then runs through an [HTTP connection with managed credentials](https://docs.databricks.com/aws/en/generative-ai/mcp/external-mcp), with execute grants, service policies, and audit records for every invocation. That puts tool permissions under the same controls as your other Databricks assets.

The video below shows the same pattern with a different harness. It connects Cursor to Atlan's MCP server so an agent pulls tables, SOPs, and business concepts from the context layer.



Because the MCP tool lives in the agent definition, not in the harness, the context stays put when you swap Claude Code for Codex. The same reasoning applies to skills: a [skill file](https://atlan.com/know/ai-agent/ai-agent-skills/agent-skills-vs-mcp/) packages a method, while MCP serves live context, and a meta-harness agent usually needs both. For a hands-on version of the connection, see how to [connect an AI coding agent to a data warehouse through MCP](https://atlan.com/know/ai-agent/how-to-connect-ai-coding-agent-to-data-warehouse-mcp/). If you run agents across vendors, the [Google ADK](https://atlan.com/know/ai-agent/ai-agent-applications/what-is-google-adk/), [Microsoft Agent Framework](https://atlan.com/know/ai-agent/microsoft/microsoft-agent-framework-vs-other-agent-frameworks/), and [Amazon Bedrock Knowledge Bases](https://atlan.com/know/ai-agent/aws/amazon-bedrock-knowledge-bases-vs-external-data-catalog/) pages show the same gap on other stacks.

---

## What should you check before adopting Omnigent?

Omnigent is early. The open-source project is in alpha and the managed version is in Beta, so a pilot is the right first step. Before you commit, work through these points:

1. **Status and region.** Confirm that the Omnigent and Sandbox previews are enabled for your workspace and that your region supports Unity Gateway.
2. **Harness tier.** Check where your harness sits: [fully supported, maintained, or community-supported](https://omnigent.ai/docs/build/harnesses/supported). Support tier decides how quickly regressions get fixed.
3. **Policy coverage.** Decide which tool calls need `ASK` or `DENY` rules before agents touch production systems, and test them against your [multi-agent security](https://atlan.com/know/ai-agent/ai-agent-governance/how-to-secure-multi-agent-systems-enterprise/) requirements.
4. **Lock-in surface.** A meta-harness lowers harness lock-in, not data or context lock-in. The [single-stack lock-in](https://atlan.com/know/ai-agent/context-layer/single-stack-lock-in-vs-neutral-context-layer/) question moves to wherever your definitions live.
5. **Context source.** Name the owner of the [tribal knowledge](https://atlan.com/know/data-for-ai/tribal-knowledge/) and definitions your agents need, and decide how it reaches them through [MCP](https://atlan.com/know/mcp/why-mcp-matters-for-ai-agents/). The [systems of record, data, and knowledge](https://atlan.com/know/ai-agent/data-for-ai/systems-of-record-data-knowledge/) split is a useful way to map it.

Teams that treat the harness as swappable and the context as durable avoid most of the rework. What Omnigent does to agent quality over months of real use is still an open question, and the project's own status labels say as much. For related Databricks coverage, read the [Genie context requirements](https://atlan.com/know/ai-agent/databricks/databricks-genie-context-requirements/), the [Databricks Data + AI Summit 2026 announcements](https://atlan.com/know/ai-agent/databricks/databricks-data-ai-summit-2026-announcements/), and [Agent Bricks](https://atlan.com/know/ai-agent/databricks/agent-bricks/).

---

## FAQs about Databricks Omnigent meta-harness

### 1. What is the difference between an agent harness and a meta-harness?

An agent harness is everything around the model that makes an agent work: prompts, instructions, tools, skills, sessions, permissions, sandboxes, and runtimes. Claude Code, Codex, Cursor, and Pi are examples. A meta-harness sits above several of them. It gives them one agent definition, one policy layer, and one session model, so you can change the harness without rewriting the agent.

### 2. What are execution modes in Omnigent?

An execution mode sets how Omnigent runs a harness. In Direct mode, Omnigent drives the agent's model and tools itself, which unlocks the full platform, including the web UI, contextual policies, and persistent sessions. In Native TUI mode, Omnigent boots the vendor's own terminal UI in a pane and mirrors it back, so you keep the native experience and add Omnigent's collaboration and policy layers.

### 3. Can you use Omnigent without Databricks?

Yes. Omnigent is an open-source project under the Apache 2.0 license, so you can run it on your own machine or on infrastructure you manage. Databricks also offers a managed version, currently in Beta, in which a Databricks-operated Omnigent server integrates with your workspace identity provider.

### 4. Which agent harnesses does Omnigent support?

Omnigent groups harnesses into three support tiers. Claude Code, Codex, and the OpenAI Agents SDK are fully supported. Copilot, Cursor, OpenCode, and Pi are maintained. Antigravity, Devin, Hermes, Kimi, Kiro, Qwen Code, and Rovo Dev are community-supported. The managed version on Databricks lists Claude Code, Codex, Cursor, Pi, and agents you write yourself.

### 5. Does Omnigent give agents business context?

No. Omnigent defines how an agent runs, which tools it can call, and which policies apply. It does not hold your business definitions, lineage, ownership, or quality signals. Agents get that context from the systems they connect to, typically through MCP tools registered in the agent definition.

### 6. How does Atlan get the right context to Omnigent agents?

Atlan exposes its context layer through a hosted MCP server. You register that server as an MCP tool in the agent's YAML definition, and the agent can search assets, traverse lineage, and read governed definitions. Because the tool lives in the agent definition and not in the harness, the same context follows the agent when you swap harnesses.

---

## Sources

1. Introducing Omnigent: A Meta-Harness to Combine, Control and Share Your Agents, Databricks, 2026. https://www.databricks.com/blog/introducing-omnigent-meta-harness-combine-control-and-share-your-agents
2. omnigent-ai/omnigent, GitHub, 2026. https://github.com/omnigent-ai/omnigent
3. Agent YAML specification, omnigent-ai/omnigent, GitHub, 2026. https://github.com/omnigent-ai/omnigent/blob/main/docs/AGENT_YAML_SPEC.md
4. Omnigent on Databricks, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/omnigent/
5. Omnigent quickstart, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/omnigent/quickstart
6. Databricks Sandbox, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/compute/serverless/sandbox
7. Unity Gateway, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/ai-gateway/
8. Unity Catalog, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/data-governance/unity-catalog/
9. MCP Services, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/agents/mcp-tools/mcp-services
10. Connect to external MCP servers, Databricks Documentation, 2026. https://docs.databricks.com/aws/en/generative-ai/mcp/external-mcp
11. Custom Agents, Omnigent Docs, 2026. https://omnigent.ai/docs/use/custom-agents
12. Shared Server, Omnigent Docs, 2026. https://omnigent.ai/docs/deploy/overview
13. Web UI, Omnigent Docs, 2026. https://omnigent.ai/docs/interact/web-ui
14. Terminal, Omnigent Docs, 2026. https://omnigent.ai/docs/interact/terminal
15. Contextual Policies, Omnigent Docs, 2026. https://omnigent.ai/docs/policies/overview
16. Built-in Policies, Omnigent Docs, 2026. https://omnigent.ai/docs/policies/builtin
17. MCP & Tools, Omnigent Docs, 2026. https://omnigent.ai/docs/build/tools
18. Supported Harnesses, Omnigent Docs, 2026. https://omnigent.ai/docs/build/harnesses/supported
19. HarnessAgent, Vercel AI SDK Documentation, 2026. https://ai-sdk.dev/v7/docs/ai-sdk-harnesses/harness-agent
20. What is loop engineering?, IBM Think, 17 July 2026. https://www.ibm.com/think/topics/loop-engineering
21. Atlan MCP, Atlan Documentation, 2026. https://docs.atlan.com/product/capabilities/atlan-ai/how-tos/atlan-mcp-overview
22. How to crawl Databricks in Atlan, Atlan Documentation, 2026. https://docs.atlan.com/apps/connectors/data-warehouses/databricks/how-tos/crawl-databricks