> For the complete documentation index, see [llms.txt](https://docs.unbrowse.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.unbrowse.ai/for-agents/resolve-and-execute.md).

# Hole Contract and Legacy Route View

The current Unbrowse interface is one typed-hole request. The caller supplies an intent and optional context; the runtime descends through the graph, adapters, browser capture, cookies, HAR, and indexing as needed.

```ts
import { createHole } from "unbrowse/sdk";

const hole = createHole();
const result = await hole.fill({
  intent: "latest releases from this repository",
  url: "https://github.com/unbrowse-ai/unbrowse",
});
```

From a shell, call it as:

```bash
unbrowse "latest releases from unbrowse-ai/unbrowse"
unbrowse "latest releases from this repository" --url "https://github.com/unbrowse-ai/unbrowse"
```

## Why the old route view still exists

`resolve` and `execute` are the advanced decomposition of the same request. They are useful when you are inspecting the route graph, debugging a bad endpoint, or integrating with an older MCP host that cannot call the hole directly.

In that view:

* `resolve` searches local/server routes and returns candidate endpoints with evidence.
* The agent or debugger judges which candidate matches the intent.
* `execute` runs the selected endpoint with params and projection.
* `feedback` records whether the selected route satisfied the intent.

This is deliberately no longer the default training path for agents. The dogfood failure mode was obvious: agents guessed CLI verbs and flags instead of submitting one intent-shaped gap. New integrations should call the hole and let the runtime pick the descent.

## When to use it

Use the route view for:

* endpoint inspection
* regression diagnosis
* manual replay of a known route
* old MCP/tool hosts

Do not use it as the default user-task loop. For user tasks, use bare `unbrowse "task"` or the SDK hole.
