From fafd76c5e6ac4beb1e2c42c93d218f07042c7883 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 5 May 2026 20:04:12 -0700 Subject: [PATCH] docs: typography hygiene across 5 pages Replaced 80 typography characters (curly quotes, apostrophes, em/en dashes, non-breaking hyphens) with ASCII equivalents per docs/CLAUDE.md heading and content hygiene rules. - docs/plugins/sdk-entrypoints.md: 17 chars - docs/help/index.md: 17 chars - docs/concepts/agent-workspace.md: 16 chars - docs/tools/lobster.md: 15 chars - docs/tools/exec-approvals.md: 15 chars --- docs/concepts/agent-workspace.md | 32 +++++++++++++++--------------- docs/help/index.md | 34 ++++++++++++++++---------------- docs/plugins/sdk-entrypoints.md | 34 ++++++++++++++++---------------- docs/tools/exec-approvals.md | 30 ++++++++++++++-------------- docs/tools/lobster.md | 26 ++++++++++++------------ 5 files changed, 78 insertions(+), 78 deletions(-) diff --git a/docs/concepts/agent-workspace.md b/docs/concepts/agent-workspace.md index f84683159c2..532347efcc2 100644 --- a/docs/concepts/agent-workspace.md +++ b/docs/concepts/agent-workspace.md @@ -60,40 +60,40 @@ Older installs may have created `~/openclaw`. Keeping multiple workspace directo These are the standard files OpenClaw expects inside the workspace: - + Operating instructions for the agent and how it should use memory. Loaded at the start of every session. Good place for rules, priorities, and "how to behave" details. - + Persona, tone, and boundaries. Loaded every session. Guide: [SOUL.md personality guide](/concepts/soul). - + Who the user is and how to address them. Loaded every session. - + The agent's name, vibe, and emoji. Created/updated during the bootstrap ritual. - + Notes about your local tools and conventions. Does not control tool availability; it is only guidance. - + Optional tiny checklist for heartbeat runs. Keep it short to avoid token burn. - + Optional startup checklist run automatically on gateway restart (when [internal hooks](/automation/hooks) are enabled). Keep it short; use the message tool for outbound sends. - + One-time first-run ritual. Only created for a brand-new workspace. Delete it after the ritual is complete. - + Daily memory log (one file per day). Recommended to read today + yesterday on session start. - + Curated long-term memory. Only load in the main, private session (not shared/group contexts). See [Memory](/concepts/memory) for the workflow and automatic memory flush. - + Workspace-specific skills. Highest-precedence skill location for that workspace. Overrides project agent skills, personal agent skills, managed skills, bundled skills, and `skills.load.extraDirs` when names collide. - + Canvas UI files for node displays (for example `canvas/index.html`). @@ -224,7 +224,7 @@ Suggested `.gitignore` starter: ## Related -- [Heartbeat](/gateway/heartbeat) — HEARTBEAT.md workspace file -- [Sandboxing](/gateway/sandboxing) — workspace access in sandboxed environments -- [Session](/concepts/session) — session storage paths -- [Standing orders](/automation/standing-orders) — persistent instructions in workspace files +- [Heartbeat](/gateway/heartbeat) - HEARTBEAT.md workspace file +- [Sandboxing](/gateway/sandboxing) - workspace access in sandboxed environments +- [Session](/concepts/session) - session storage paths +- [Standing orders](/automation/standing-orders) - persistent instructions in workspace files diff --git a/docs/help/index.md b/docs/help/index.md index ea5998ec161..72fd8c89ad9 100644 --- a/docs/help/index.md +++ b/docs/help/index.md @@ -8,32 +8,32 @@ title: "Help" Quick "get unstuck" path for the most common problems: -- [Troubleshooting](/help/troubleshooting) — symptom-first decision tree -- [Debugging](/help/debugging) — watch mode, raw streams, dev profile -- [Install sanity](/install/node#troubleshooting) — Node / npm / PATH checks -- [Gateway troubleshooting](/gateway/troubleshooting) — gateway-specific issues -- [Doctor](/gateway/doctor) — automated repair + diagnostic bundle +- [Troubleshooting](/help/troubleshooting) - symptom-first decision tree +- [Debugging](/help/debugging) - watch mode, raw streams, dev profile +- [Install sanity](/install/node#troubleshooting) - Node / npm / PATH checks +- [Gateway troubleshooting](/gateway/troubleshooting) - gateway-specific issues +- [Doctor](/gateway/doctor) - automated repair + diagnostic bundle ## FAQ -- [FAQ](/help/faq) — day-to-day concepts and operational questions -- [First-run FAQ](/help/faq-first-run) — install, onboard, auth, subscriptions, early failures -- [Models FAQ](/help/faq-models) — model selection, failover, auth profiles +- [FAQ](/help/faq) - day-to-day concepts and operational questions +- [First-run FAQ](/help/faq-first-run) - install, onboard, auth, subscriptions, early failures +- [Models FAQ](/help/faq-models) - model selection, failover, auth profiles ## Diagnostics -- [Environment variables](/help/environment) — where OpenClaw loads env vars and precedence -- [Diagnostics flags](/diagnostics/flags) — runtime diagnostics and verbose modes -- [Node + tsx crash](/debug/node-issue) — specific Node / tsx runtime crash scenarios +- [Environment variables](/help/environment) - where OpenClaw loads env vars and precedence +- [Diagnostics flags](/diagnostics/flags) - runtime diagnostics and verbose modes +- [Node + tsx crash](/debug/node-issue) - specific Node / tsx runtime crash scenarios ## Testing -- [Testing](/help/testing) — test suites and Docker runners -- [Update and plugin tests](/help/testing-updates-plugins) — package update, migration, and plugin install validation -- [Live tests](/help/testing-live) — network-touching provider and CLI smokes +- [Testing](/help/testing) - test suites and Docker runners +- [Update and plugin tests](/help/testing-updates-plugins) - package update, migration, and plugin install validation +- [Live tests](/help/testing-live) - network-touching provider and CLI smokes ## Community and meta -- [OpenClaw lore](/start/lore) — the story -- [Docs hubs](/start/hubs) — how this documentation is organized -- [Docs directory](/start/docs-directory) — full file map +- [OpenClaw lore](/start/lore) - the story +- [Docs hubs](/start/hubs) - how this documentation is organized +- [Docs directory](/start/docs-directory) - full file map diff --git a/docs/plugins/sdk-entrypoints.md b/docs/plugins/sdk-entrypoints.md index 1a24c9c1f09..69052d62097 100644 --- a/docs/plugins/sdk-entrypoints.md +++ b/docs/plugins/sdk-entrypoints.md @@ -71,12 +71,12 @@ export default definePluginEntry({ | Field | Type | Required | Default | | -------------- | ---------------------------------------------------------------- | -------- | ------------------- | -| `id` | `string` | Yes | — | -| `name` | `string` | Yes | — | -| `description` | `string` | Yes | — | -| `kind` | `string` | No | — | +| `id` | `string` | Yes | - | +| `name` | `string` | Yes | - | +| `description` | `string` | Yes | - | +| `kind` | `string` | No | - | | `configSchema` | `OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema` | No | Empty object schema | -| `register` | `(api: OpenClawPluginApi) => void` | Yes | — | +| `register` | `(api: OpenClawPluginApi) => void` | Yes | - | - `id` must match your `openclaw.plugin.json` manifest. - `kind` is for exclusive slots: `"memory"` or `"context-engine"`. @@ -112,14 +112,14 @@ export default defineChannelPluginEntry({ | Field | Type | Required | Default | | --------------------- | ---------------------------------------------------------------- | -------- | ------------------- | -| `id` | `string` | Yes | — | -| `name` | `string` | Yes | — | -| `description` | `string` | Yes | — | -| `plugin` | `ChannelPlugin` | Yes | — | +| `id` | `string` | Yes | - | +| `name` | `string` | Yes | - | +| `description` | `string` | Yes | - | +| `plugin` | `ChannelPlugin` | Yes | - | | `configSchema` | `OpenClawPluginConfigSchema \| () => OpenClawPluginConfigSchema` | No | Empty object schema | -| `setRuntime` | `(runtime: PluginRuntime) => void` | No | — | -| `registerCliMetadata` | `(api: OpenClawPluginApi) => void` | No | — | -| `registerFull` | `(api: OpenClawPluginApi) => void` | No | — | +| `setRuntime` | `(runtime: PluginRuntime) => void` | No | - | +| `registerCliMetadata` | `(api: OpenClawPluginApi) => void` | No | - | +| `registerFull` | `(api: OpenClawPluginApi) => void` | No | - | - `setRuntime` is called during registration so you can store the runtime reference (typically via `createPluginRuntimeStore`). It is skipped during CLI metadata @@ -275,8 +275,8 @@ Use `openclaw plugins inspect ` to see a plugin's shape. ## Related -- [SDK Overview](/plugins/sdk-overview) — registration API and subpath reference -- [Runtime Helpers](/plugins/sdk-runtime) — `api.runtime` and `createPluginRuntimeStore` -- [Setup and Config](/plugins/sdk-setup) — manifest, setup entry, deferred loading -- [Channel Plugins](/plugins/sdk-channel-plugins) — building the `ChannelPlugin` object -- [Provider Plugins](/plugins/sdk-provider-plugins) — provider registration and hooks +- [SDK Overview](/plugins/sdk-overview) - registration API and subpath reference +- [Runtime Helpers](/plugins/sdk-runtime) - `api.runtime` and `createPluginRuntimeStore` +- [Setup and Config](/plugins/sdk-setup) - manifest, setup entry, deferred loading +- [Channel Plugins](/plugins/sdk-channel-plugins) - building the `ChannelPlugin` object +- [Provider Plugins](/plugins/sdk-provider-plugins) - provider registration and hooks diff --git a/docs/tools/exec-approvals.md b/docs/tools/exec-approvals.md index 49df3a6c80f..e616bf286bd 100644 --- a/docs/tools/exec-approvals.md +++ b/docs/tools/exec-approvals.md @@ -18,7 +18,7 @@ skips approvals). Effective policy is the **stricter** of `tools.exec.*` and approvals defaults; if an approvals field is omitted, the `tools.exec` value is -used. Host exec also uses local approvals state on that machine — a +used. Host exec also uses local approvals state on that machine - a host-local `ask: "always"` in `~/.openclaw/exec-approvals.json` keeps prompting even if session or config defaults request `ask: "on-miss"`. @@ -116,18 +116,18 @@ Example schema: ### `exec.security` - - `deny` — block all host exec requests. - - `allowlist` — allow only allowlisted commands. - - `full` — allow everything (equivalent to elevated). + - `deny` - block all host exec requests. + - `allowlist` - allow only allowlisted commands. + - `full` - allow everything (equivalent to elevated). ### `exec.ask` - - `off` — never prompt. - - `on-miss` — prompt only when the allowlist does not match. - - `always` — prompt on every command. `allow-always` durable trust does **not** suppress prompts when effective ask mode is `always`. + - `off` - never prompt. + - `on-miss` - prompt only when the allowlist does not match. + - `always` - prompt on every command. `allow-always` durable trust does **not** suppress prompts when effective ask mode is `always`. @@ -136,9 +136,9 @@ Example schema: Resolution when a prompt is required but no UI is reachable. -- `deny` — block. -- `allowlist` — allow only if allowlist matches. -- `full` — allow. +- `deny` - block. +- `allowlist` - allow only if allowlist matches. +- `full` - allow. @@ -168,7 +168,7 @@ automatically. ## YOLO mode (no-approval) If you want host exec to run without approval prompts, you must open -**both** policy layers — requested exec policy in OpenClaw config +**both** policy layers - requested exec policy in OpenClaw config (`tools.exec.*`) **and** host-local approvals policy in `~/.openclaw/exec-approvals.json`. @@ -194,7 +194,7 @@ CLI-backed providers that expose their own noninteractive permission mode can follow this policy. Claude CLI adds `--permission-mode bypassPermissions` when OpenClaw's requested exec policy is YOLO. Override that backend behavior with explicit Claude args -under `agents.defaults.cliBackends.claude-cli.args` / `resumeArgs` — +under `agents.defaults.cliBackends.claude-cli.args` / `resumeArgs` - for example `--permission-mode default`, `acceptEdits`, or `bypassPermissions`. @@ -365,7 +365,7 @@ skill bin list. Disable this if you want strict manual allowlists. For safe bins (the stdin-only fast-path), interpreter binding details, and how to forward approval prompts to Slack/Discord/Telegram (or run them as native approval clients), see -[Exec approvals — advanced](/tools/exec-approvals-advanced). +[Exec approvals - advanced](/tools/exec-approvals-advanced). ## Control UI editing @@ -379,7 +379,7 @@ Nodes must advertise `system.execApprovals.get/set` (macOS app or headless node host). If a node does not advertise exec approvals yet, edit its local `~/.openclaw/exec-approvals.json` directly. -CLI: `openclaw approvals` supports gateway or node editing — see +CLI: `openclaw approvals` supports gateway or node editing - see [Approvals CLI](/cli/approvals). ## Approval flow @@ -435,7 +435,7 @@ run. ## Related - + Safe bins, interpreter binding, and approval forwarding to chat. diff --git a/docs/tools/lobster.md b/docs/tools/lobster.md index 693746b98c0..b60b659b1b0 100644 --- a/docs/tools/lobster.md +++ b/docs/tools/lobster.md @@ -26,9 +26,9 @@ Today, complex workflows require many back-and-forth tool calls. Each call costs Lobster is intentionally small. The goal is not "a new language," it's a predictable, AI-friendly pipeline spec with first-class approvals and resume tokens. -- **Approve/resume is built in**: A normal program can prompt a human, but it can’t _pause and resume_ with a durable token without you inventing that runtime yourself. -- **Determinism + auditability**: Pipelines are data, so they’re easy to log, diff, replay, and review. -- **Constrained surface for AI**: A tiny grammar + JSON piping reduces “creative” code paths and makes validation realistic. +- **Approve/resume is built in**: A normal program can prompt a human, but it can't _pause and resume_ with a durable token without you inventing that runtime yourself. +- **Determinism + auditability**: Pipelines are data, so they're easy to log, diff, replay, and review. +- **Constrained surface for AI**: A tiny grammar + JSON piping reduces "creative" code paths and makes validation realistic. - **Safety policy baked in**: Timeouts, output caps, sandbox checks, and allowlists are enforced by the runtime, not each script. - **Still programmable**: Each step can call any CLI or script. If you want JS/TS, generate `.lobster` files from code. @@ -39,7 +39,7 @@ If the pipeline pauses for approval, the tool returns a `resumeToken` so you can ## Pattern: small CLI + JSON pipes + approvals -Build tiny commands that speak JSON, then chain them into a single Lobster call. (Example command names below — swap in your own.) +Build tiny commands that speak JSON, then chain them into a single Lobster call. (Example command names below - swap in your own.) ```bash inbox list --json @@ -148,7 +148,7 @@ steps: Notes: -- `stdin: $step.stdout` and `stdin: $step.json` pass a prior step’s output. +- `stdin: $step.stdout` and `stdin: $step.json` pass a prior step's output. - `condition` (or `when`) can gate steps on `$step.approved`. ## Install Lobster @@ -317,10 +317,10 @@ OpenProse pairs well with Lobster: use `/prose` to orchestrate multi-agent prep, ## Safety -- **Local in-process only** — workflows execute inside the gateway process; no network calls from the plugin itself. -- **No secrets** — Lobster doesn't manage OAuth; it calls OpenClaw tools that do. -- **Sandbox-aware** — disabled when the tool context is sandboxed. -- **Hardened** — timeouts and output caps enforced by the embedded runner. +- **Local in-process only** - workflows execute inside the gateway process; no network calls from the plugin itself. +- **No secrets** - Lobster doesn't manage OAuth; it calls OpenClaw tools that do. +- **Sandbox-aware** - disabled when the tool context is sandboxed. +- **Hardened** - timeouts and output caps enforced by the embedded runner. ## Troubleshooting @@ -336,13 +336,13 @@ OpenProse pairs well with Lobster: use `/prose` to orchestrate multi-agent prep, ## Case study: community workflows -One public example: a “second brain” CLI + Lobster pipelines that manage three Markdown vaults (personal, partner, shared). The CLI emits JSON for stats, inbox listings, and stale scans; Lobster chains those commands into workflows like `weekly-review`, `inbox-triage`, `memory-consolidation`, and `shared-task-sync`, each with approval gates. AI handles judgment (categorization) when available and falls back to deterministic rules when not. +One public example: a "second brain" CLI + Lobster pipelines that manage three Markdown vaults (personal, partner, shared). The CLI emits JSON for stats, inbox listings, and stale scans; Lobster chains those commands into workflows like `weekly-review`, `inbox-triage`, `memory-consolidation`, and `shared-task-sync`, each with approval gates. AI handles judgment (categorization) when available and falls back to deterministic rules when not. - Thread: [https://x.com/plattenschieber/status/2014508656335770033](https://x.com/plattenschieber/status/2014508656335770033) - Repo: [https://github.com/bloomedai/brain-cli](https://github.com/bloomedai/brain-cli) ## Related -- [Automation & Tasks](/automation) — scheduling Lobster workflows -- [Automation Overview](/automation) — all automation mechanisms -- [Tools Overview](/tools) — all available agent tools +- [Automation & Tasks](/automation) - scheduling Lobster workflows +- [Automation Overview](/automation) - all automation mechanisms +- [Tools Overview](/tools) - all available agent tools