You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/AGENTS.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -15,6 +15,7 @@ This directory owns docs authoring, Mintlify link rules, and docs i18n policy.
15
15
16
16
- For docs, UI copy, and picker lists, order services/providers alphabetically unless the section is explicitly describing runtime order or auto-detection order.
17
17
- Keep bundled plugin naming consistent with the repo-wide plugin terminology rules in the root `AGENTS.md`.
18
+
- Generated docs, never hand-edit: `docs/plugins/reference/**`, `docs/plugins/reference.md`, and `docs/plugins/plugin-inventory.md` come from `pnpm plugins:inventory:gen`; `docs/docs_map.md` from `pnpm docs:map:gen`; `docs/maturity/**` from `pnpm maturity:render`.
Copy file name to clipboardExpand all lines: docs/agent-runtime-architecture.md
+21-14Lines changed: 21 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,29 +1,32 @@
1
1
---
2
2
title: "Agent runtime architecture"
3
-
summary: "How OpenClaw runs the built-in agent runtime, providers, sessions, tools, and extensions."
3
+
summary: "How OpenClaw structures the built-in agent runtime: code layout, boundaries, resource manifests, and runtime selection."
4
4
---
5
5
6
-
OpenClaw owns the built-in agent runtime directly. The runtime code lives under `src/agents/`, model/provider helpers live under `src/llm/`, and plugin-facing contracts are exposed through `openclaw/plugin-sdk/*` barrels.
6
+
OpenClaw owns the built-in agent runtime. Runtime code lives under `src/agents/`, model/provider transport lives under `src/llm/`, and plugin-facing contracts are exposed through `openclaw/plugin-sdk/*` barrels.
7
7
8
8
## Runtime Layout
9
9
10
-
-`src/agents/embedded-agent-runner/`: built-in agent attempt loop, provider stream adapters, compaction, model selection, and session wiring.
|`src/agents/runtime/`| OpenClaw facade that wires `@openclaw/agent-core` to the plugin SDK LLM runtime and re-exports it plus local proxy utilities. |
|`src/agents/harness/`| Harness registry, selection policy, and lifecycle for the built-in and plugin-registered harnesses. |
19
+
|`src/llm/`| Model/provider registry, transport helpers, and provider-specific stream implementations (`src/llm/providers/`). |
17
20
18
21
## Boundaries
19
22
20
-
Core code calls the built-in runtime through OpenClaw modules and SDK barrels, not through old external agent packages. Plugins use documented `openclaw/plugin-sdk/*` entrypoints and do not import `src/**` internals.
23
+
Core calls the built-in runtime through OpenClaw modules and SDK barrels; no external agent framework packages remain. Plugins use documented `openclaw/plugin-sdk/*` entrypoints and do not import `src/**` internals.
21
24
22
-
`@earendil-works/pi-tui` remains a third-party TUI dependency. It is used as a terminal component toolkit by the local TUI and session renderers; internalizing it would be a separate vendoring effort.
25
+
`@earendil-works/pi-tui` remains a third-party dependency: a terminal component toolkit used by the local TUI and session tool renderers. Internalizing it would be a separate vendoring effort.
23
26
24
27
## Manifests
25
28
26
-
Resource packages declare OpenClaw resources in package metadata:
29
+
Resource packages declare OpenClaw resources in `package.json` metadata. Entries are file paths or globs relative to the package root:
The package manager also discovers conventional `extensions/`, `skills/`, `prompts/`, and `themes/` directories.
42
+
Resource types not listed in a manifest fall back to discovery of conventional `extensions/`, `skills/`, `prompts/`, and `themes/` directories.
40
43
41
44
## Runtime Selection
42
45
43
-
The default built-in runtime id is `openclaw`. Plugin harnesses can register additional runtime ids. `auto` selects a supporting plugin harness when one exists and otherwise uses the built-in OpenClaw runtime.
46
+
- The built-in runtime id is `openclaw`. The legacy alias `pi` normalizes to `openclaw`; `codex-app-server` normalizes to `codex`.
47
+
- Plugin harnesses register additional runtime ids (for example `codex`).
48
+
- Runtime policy is model/provider-scoped `agentRuntime.id` config (model entry wins over provider entry). Unset or `default` resolves to `auto`.
49
+
-`auto` selects a registered plugin harness that supports the provider/model, otherwise the built-in OpenClaw runtime.
50
+
- The `openai` provider on the official API endpoint defaults to the `codex` harness; custom `baseUrl` values keep their configured behavior.
Copy file name to clipboardExpand all lines: docs/announcements/bluebubbles-imessage.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,17 +9,17 @@ title: "BlueBubbles removal and the imsg iMessage path"
9
9
10
10
# BlueBubbles removal and the imsg iMessage path
11
11
12
-
OpenClaw no longer ships the BlueBubbles channel. iMessage support now runs through the bundled `imessage` plugin, which starts [`imsg`](https://github.com/steipete/imsg) locally or through an SSH wrapper and talks JSON-RPC over stdin/stdout.
12
+
OpenClaw no longer ships the BlueBubbles channel. iMessage support runs through the bundled `imessage` plugin: the Gateway spawns [`imsg`](https://github.com/steipete/imsg)as a child process, locally or through an SSH wrapper, and talks JSON-RPC over stdin/stdout. No server, no webhook, no port.
13
13
14
14
If your config still contains `channels.bluebubbles`, migrate it to `channels.imessage`. The legacy `/channels/bluebubbles` docs URL redirects to [Coming from BlueBubbles](/channels/imessage-from-bluebubbles), which has the full config translation table and cutover checklist.
15
15
16
16
## What changed
17
17
18
-
-There is no BlueBubbles HTTP server, webhook route, REST password, or BlueBubbles plugin runtime in the supported OpenClaw iMessage path.
18
+
-The supported iMessage path has no BlueBubbles HTTP server, webhook route, REST password, or BlueBubbles plugin runtime.
19
19
- OpenClaw reads and watches Messages through `imsg` on the Mac where Messages.app is signed in.
20
20
- Basic send, receive, history, and media use the normal `imsg` surfaces and macOS permissions.
21
-
- Advanced actions such as threaded replies, tapbacks, edit, unsend, effects, read receipts, typing indicators, and group management require `imsg launch` with the private API bridge available.
22
-
- Linux and Windows gateways can still use iMessage by setting`channels.imessage.cliPath`to an SSH wrapper that runs `imsg` on the signed-in Mac.
21
+
- Advanced actions (threaded replies, tapbacks, edit, unsend, effects, read receipts, typing indicators, group management) need the private API bridge: run `imsg launch`, which requires SIP disabled.
22
+
- Linux and Windows gateways can still use iMessage by pointing`channels.imessage.cliPath`at an SSH wrapper that runs `imsg` on the signed-in Mac.
23
23
24
24
## What to do
25
25
@@ -65,12 +65,12 @@ If your config still contains `channels.bluebubbles`, migrate it to `channels.im
65
65
66
66
## Migration notes
67
67
68
-
-`channels.bluebubbles.serverUrl` and `channels.bluebubbles.password` have no iMessage equivalent.
69
-
-`channels.bluebubbles.allowFrom`, `groupAllowFrom`, `groups`, `includeAttachments`, attachment roots, media size limits, chunking, and action toggles have iMessage equivalents.
68
+
-`channels.bluebubbles.serverUrl` and `channels.bluebubbles.password` have no iMessage equivalent; there is no server to reach or authenticate.
69
+
-`allowFrom`, `groupAllowFrom`, `groups`, `includeAttachments`, `attachmentRoots`, `mediaMaxMb`, `textChunkLimit`, and `actions.*` keep their meaning under `channels.imessage`.
70
70
-`channels.imessage.includeAttachments` is still off by default. Set it explicitly if you expect inbound photos, voice memos, videos, or files to reach the agent.
71
-
- With `groupPolicy: "allowlist"`, copy the old `groups` block, including any `"*"` wildcard entry. Group sender allowlists and the group registry are separate gates.
72
-
- ACP bindings that matched `channel: "bluebubbles"` must be changed to `channel: "imessage"`.
73
-
- Old BlueBubbles session keys do not become iMessage session keys. Pairing approvals carry over by handle, but conversation history under BlueBubbles session keys does not.
71
+
- With `groupPolicy: "allowlist"`, copy the old `groups` block, including any `"*"` wildcard entry. Group sender allowlists and the group registry are separate gates; a `groups` block with entries but no matching `chat_id` (or no `"*"`) drops the message at runtime, and an empty `groups` block logs a startup warning even though sender filtering still lets messages through.
72
+
- ACP bindings with `match.channel: "bluebubbles"` must change to `"imessage"`.
73
+
- Old BlueBubbles session keys do not become iMessage session keys. Pairing approvals key off sender handles, so copied `allowFrom` entries keep working, but conversation history under BlueBubbles session keys does not carry over.
0 commit comments