Decisions

Why lnk-openclaw runs OpenClaw the way it does. Link's own decisions about harnesses are on its Agents Decisions page.

Why carry its state over ASP?

OpenClaw keeps its own sessions behind its gateway, and its hub replays them through openclaw acp's own list and load. A switch takes them out whole; none goes in, as its gateway takes no session from outside its own runs, and the switch says so rather than injecting history.

Where is OpenClaw's workspace?

In its home (~/Link/Agents/main/Harnesses/openclaw/.openclaw/workspace), with its personality and memory, and ~/Link/Agents/main/Home as the shared folder. Hermes works in Home.

How does OpenClaw use a local model?

Only through Ollama, registered with its address and Ollama's own API, and a context window of 32,768 tokens on both sides: OpenClaw's budget and Ollama's num_ctx. Ollama's default window, a few thousand tokens, is smaller than OpenClaw's own instructions.

How do your connections reach OpenClaw?

Over ACP, the Agent Client Protocol, as they reach every harness: Link's bridge, then the harness hub in lnk-openclaw serve, then openclaw acp over stdio, which forwards each prompt to its gateway. OpenClaw runs none of its channels, so one bot's credential has one reader, a switch or a move never has two harnesses polling it, and its Slack and Discord, whose sockets couldn't use Link's proxy, no longer ask for the network as it is.

How a chat is kept

Each chat is an ACP session of openclaw acp, a gateway session behind it, which the hub keeps by the chat's thread and takes up again after a restart. The hub's key is Link's key for the start, the gateway's token too, which only the bridge holds; the gateway's own chat completions stay off.

Who runs its scheduled jobs?

Link's scheduler, as for every harness whose contract says from: a schedule's message reaches OpenClaw over ACP, said as the schedule's, and its answer goes where the schedule says. OpenClaw's own cron is off (cron.enabled: false), as its channels are, so no job fires twice.

No sandbox only with OpenAI on a Mac, where Codex's runtime runs ps, which no macOS sandbox runs. An agent on any connection with Anthropic runs with Link's defaults.

Why is its browser off without the sandbox, or with --network-mode host?

Because there its managed browser's debugging port asks for no credential on the machine's loopback, where every user and program reaches it, and so drives the browser as you. Its other browser ports ask for a token, or don't open in the sandbox.

Off by default

OpenClaw runs well without its browser, so the safe answer is the default: needs names it as a risk it runs without, browser, and only your yes in a terminal, or lnk agent harness allow browser --harness openclaw, turns it on.

Where it stays on

In the sandbox on a Mac it stays on, since OpenClaw finds no Chrome to start there; on Linux it stays on behind its proxy, where the port stays in the sandbox's network.

How the adapter knows

Link tells the adapter whether it runs behind its proxy (proxied in its settings), so --network-mode host is asked about as no sandbox is, and it takes a Link that doesn't say as no proxy.

How does OpenClaw get a secret in its config?

By variable: a value in its config that holds a secret names a variable of its .env (${LNK_OPENCLAW_GATEWAY_TOKEN}, ${LNK_OPENCLAW_MODEL_URL}), which OpenClaw reads as it loads its config, so openclaw config set never has one on its command line, where every user of the machine sees it.

The model's address

The model's address is one, since a model on this machine is reached through its proxy with the proxy's secret in its path. OpenClaw refuses a config naming a variable that isn't set, so the model's address stays in .env until no provider's entry names it.

Its tools' addresses

Its tools' addresses, which hold the secret too, are written into its config file itself (600), by this adapter rather than openclaw config set.

Which of OpenClaw's bugs does it work around?

A bug in the OpenClaw release the adapter pins is worked around in the adapter's src/workarounds/, apart from the code meant to stay, each naming the bug and its report to OpenClaw. A workaround goes once the pin moves to a release that fixes its bug.

Its sessions' ids over ACP

OpenClaw 2026.9.6's openclaw acp confuses a session's ACP id with its gateway key, acp-bridge:<id>. A session/resume after a restart binds the session to a new, empty one, and session/list names each session by its key. Between the hub and openclaw acp, the adapter takes resume out of what it offers, so the hub takes a session up with session/load, which finds it, and gives a list's sessions their ids. So a chat goes on after OpenClaw restarts, and a switch away carries each chat as the thread it was.