diff --git a/.agents/skills/autoreview/SKILL.md b/.agents/skills/autoreview/SKILL.md index 331ca4065075..a8464a9d7755 100644 --- a/.agents/skills/autoreview/SKILL.md +++ b/.agents/skills/autoreview/SKILL.md @@ -213,22 +213,22 @@ The helper accepts `--model` globally or per engine (`engine=model`) and `--thin Recommended model defaults: -| Engine | Default model | Source note | -|--------|---------------|-------------| -| **codex** (default) | `gpt-5.5` | OpenAI's current GPT-5.5 alias | -| **claude** | `claude-fable-5` | Anthropic's most capable widely released Claude model | +| Engine | Default model | Source note | +| ------------------- | ---------------- | ----------------------------------------------------- | +| **codex** (default) | `gpt-5.5` | OpenAI's current GPT-5.5 alias | +| **claude** | `claude-fable-5` | Anthropic's most capable widely released Claude model | CLI flags and environment variables override these defaults. Droid, Copilot, Pi, Cursor, and OpenCode do not get built-in model defaults here because their provider catalogs are external to the Codex/Claude closeout path and may vary by installation. -| Engine | Model flag | Example model IDs | Thinking flag | Accepted levels | -|--------|------------|-------------------|---------------|-----------------| -| **codex** (default) | `codex --model X exec ...` | `gpt-5.5`, `gpt-5.5-2026-04-23` | `-c model_reasoning_effort=Y` | `none`, `minimal`, `low`, `medium`, `high`, `xhigh` | -| **claude** | `claude --model X` | `claude-fable-5`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-haiku-4-5` | `--effort Y` | `low`, `medium`, `high`, `xhigh`, `max` | -| **droid** | currently refused | Factory model IDs | `-r, --reasoning-effort Y` | `off`, `none`, `low`, `medium`, `high`, `xhigh`, `max` | -| **copilot** | `copilot --model X` | `gpt-5.2`, Copilot model aliases | not supported | n/a | -| **pi** | `pi --model X` | `anthropic/claude-sonnet-4`, `openai/gpt-4o` | `--thinking Y` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` | -| **cursor** | `cursor-agent --model X` | `auto`, Cursor model aliases | not supported | n/a | -| **opencode** | `opencode run -m X` | `opencode/north-mini-code-free`, OpenCode provider/model IDs | `--variant Y` | `minimal`, `low`, `medium`, `high`, `max` | +| Engine | Model flag | Example model IDs | Thinking flag | Accepted levels | +| ------------------- | -------------------------- | ---------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | +| **codex** (default) | `codex --model X exec ...` | `gpt-5.5`, `gpt-5.5-2026-04-23` | `-c model_reasoning_effort=Y` | `none`, `minimal`, `low`, `medium`, `high`, `xhigh` | +| **claude** | `claude --model X` | `claude-fable-5`, `claude-opus-4-8`, `claude-sonnet-4-6`, `claude-haiku-4-5` | `--effort Y` | `low`, `medium`, `high`, `xhigh`, `max` | +| **droid** | currently refused | Factory model IDs | `-r, --reasoning-effort Y` | `off`, `none`, `low`, `medium`, `high`, `xhigh`, `max` | +| **copilot** | `copilot --model X` | `gpt-5.2`, Copilot model aliases | not supported | n/a | +| **pi** | `pi --model X` | `anthropic/claude-sonnet-4`, `openai/gpt-4o` | `--thinking Y` | `off`, `minimal`, `low`, `medium`, `high`, `xhigh` | +| **cursor** | `cursor-agent --model X` | `auto`, Cursor model aliases | not supported | n/a | +| **opencode** | `opencode run -m X` | `opencode/north-mini-code-free`, OpenCode provider/model IDs | `--variant Y` | `minimal`, `low`, `medium`, `high`, `max` | Claude also supports `--fallback-model a,b` for availability-based fallback chains ([model-config](https://code.claude.com/docs/en/model-config)). Current Claude docs note that auth, billing, rate-limit, request-size, and transport errors do not trigger fallback, and the changelog documents interactive-session support in `v2.1.166`. @@ -272,17 +272,17 @@ Store persistent personal defaults in your shell startup file or launcher environment. For repository-local defaults, use an existing local environment loader such as an untracked `.envrc`; the helper does not write a config file. -| Variable | Purpose | -|----------|---------| -| `AUTOREVIEW_MODEL` | Override the built-in default `--model` for all engines | -| `AUTOREVIEW_THINKING` | Default `--thinking` for all engines | -| `AUTOREVIEW_FALLBACK_MODEL` | Default Claude `--fallback-model` chain | -| `AUTOREVIEW__MODEL` | Per-engine model override, for example `AUTOREVIEW_CODEX_MODEL=gpt-5.5` | -| `AUTOREVIEW__THINKING` | Per-engine thinking override | -| `AUTOREVIEW_CODEX_CONFIG` | Default Codex `-c key=value` overrides, semicolon-separated, e.g. `service_tier="fast"`; isolation flags still win | -| `AUTOREVIEW_CODEX_SPEED` | Default Codex service tier: `fast` (priority), `flex`, or `default`; silently standard when the model does not list the tier | -| `AUTOREVIEW_CLAUDE_FALLBACK_MODEL` | Claude-only fallback chain | -| `AUTOREVIEW_CURSOR_ALLOW_WORKSPACE_INSTRUCTIONS` | Required `1`/true opt-in for Cursor reviews of trusted repositories | +| Variable | Purpose | +| ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------- | +| `AUTOREVIEW_MODEL` | Override the built-in default `--model` for all engines | +| `AUTOREVIEW_THINKING` | Default `--thinking` for all engines | +| `AUTOREVIEW_FALLBACK_MODEL` | Default Claude `--fallback-model` chain | +| `AUTOREVIEW__MODEL` | Per-engine model override, for example `AUTOREVIEW_CODEX_MODEL=gpt-5.5` | +| `AUTOREVIEW__THINKING` | Per-engine thinking override | +| `AUTOREVIEW_CODEX_CONFIG` | Default Codex `-c key=value` overrides, semicolon-separated, e.g. `service_tier="fast"`; isolation flags still win | +| `AUTOREVIEW_CODEX_SPEED` | Default Codex service tier: `fast` (priority), `flex`, or `default`; silently standard when the model does not list the tier | +| `AUTOREVIEW_CLAUDE_FALLBACK_MODEL` | Claude-only fallback chain | +| `AUTOREVIEW_CURSOR_ALLOW_WORKSPACE_INSTRUCTIONS` | Required `1`/true opt-in for Cursor reviews of trusted repositories | Codex maps thinking to `model_reasoning_effort`. Claude maps thinking to `--effort`. Droid maps thinking to `-r, --reasoning-effort`. Pi maps thinking to `--thinking`. OpenCode maps thinking to `--variant`. Copilot and Cursor reject `--thinking`. Only Claude accepts `--fallback-model`; global CLI/env fallback requires at least one Claude reviewer, and engine-specific fallback overrides require that reviewer to be selected. Non-Claude fallback overrides, including `AUTOREVIEW__FALLBACK_MODEL`, fail closed instead of being silently ignored. @@ -290,14 +290,14 @@ Codex maps thinking to `model_reasoning_effort`. Claude maps thinking to `--effo When autoreview runs inside the repository under review, external reviewer CLIs must not load project-local trust or configuration that the branch controls. -| Engine | Isolation flags | Reference | -|--------|-----------------|-----------| -| **codex** | Auth-only config overrides, `-c project_doc_max_bytes=0`, repo `trust_level="untrusted"`, `exec --ignore-user-config --ignore-rules`, plus read-only sandbox | Codex CLI `exec --help` | -| **claude** | `--safe-mode --setting-sources user --strict-mcp-config --disallowedTools mcp__*` plus explicit `--allowedTools` (`--safe-mode` requires Claude Code `v2.1.169+`) | Claude Code [CLI reference](https://code.claude.com/docs/en/cli-reference) | -| **droid** | Fails closed: current CLI cannot disable both project instructions and all tools | Droid CLI `exec --help` and `--list-tools` | -| **pi** | `--no-approve --no-session --no-context-files --no-extensions --no-skills --no-prompt-templates --no-themes --no-tools` | Pi CLI `--help`; requires Pi `v0.79.0+` | -| **opencode** | `opencode run --dir --pure --format json`, prompt over stdin, neutral subprocess cwd, injected deny-by-default permissions, project config disabled | OpenCode CLI `--help` | -| **cursor** | `cursor-agent --print --mode ask --sandbox enabled --output-format json|stream-json`, prompt over stdin, temporary read-only permission config, help-probed flags, and mandatory explicit trusted-workspace opt-in | Cursor CLI [headless mode](https://cursor.com/docs/cli/headless), [output format](https://cursor.com/docs/cli/reference/output-format), [permissions](https://cursor.com/docs/cli/reference/permissions), [configuration](https://cursor.com/docs/cli/reference/configuration) | +| Engine | Isolation flags | Reference | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **codex** | Auth-only config overrides, `-c project_doc_max_bytes=0`, repo `trust_level="untrusted"`, `exec --ignore-user-config --ignore-rules`, plus read-only sandbox | Codex CLI `exec --help` | +| **claude** | `--safe-mode --setting-sources user --strict-mcp-config --disallowedTools mcp__*` plus explicit `--allowedTools` (`--safe-mode` requires Claude Code `v2.1.169+`) | Claude Code [CLI reference](https://code.claude.com/docs/en/cli-reference) | +| **droid** | Fails closed: current CLI cannot disable both project instructions and all tools | Droid CLI `exec --help` and `--list-tools` | +| **pi** | `--no-approve --no-session --no-context-files --no-extensions --no-skills --no-prompt-templates --no-themes --no-tools` | Pi CLI `--help`; requires Pi `v0.79.0+` | +| **opencode** | `opencode run --dir --pure --format json`, prompt over stdin, neutral subprocess cwd, injected deny-by-default permissions, project config disabled | OpenCode CLI `--help` | +| **cursor** | `cursor-agent --print --mode ask --sandbox enabled --output-format json\|stream-json`, prompt over stdin, temporary read-only permission config, help-probed flags, and mandatory explicit trusted-workspace opt-in | Cursor CLI [headless mode](https://cursor.com/docs/cli/headless), [output format](https://cursor.com/docs/cli/reference/output-format), [permissions](https://cursor.com/docs/cli/reference/permissions), [configuration](https://cursor.com/docs/cli/reference/configuration) | Codex `--ignore-user-config` skips config loading for the exec run. Autoreview reconstructs only the documented `cli_auth_credentials_store`, `forced_login_method`, and `forced_chatgpt_workspace_id` settings from `CODEX_HOME/config.toml`, keeping authentication and workspace restrictions usable without forwarding unrelated user configuration. The explicit repo trust override and zero project-doc budget keep reviewed-repo `AGENTS.md` and `.codex/` trust surfaces out of the review prompt. `--ignore-rules` skips user/project execpolicy rules. Claude `--safe-mode` disables project hooks, skills, plugins, MCP servers, and CLAUDE.md while preserving normal authentication, model selection, built-in tools, and permissions; managed settings policy can still apply. `--setting-sources user` avoids project/local settings from the reviewed checkout, and current Claude Code docs note the project-skill blocking behavior was fixed in `v2.1.69`. `--strict-mcp-config` and `--disallowedTools mcp__*` keep MCP unavailable to the review run. `--bare` is not used here because Claude's headless docs say it skips OAuth and keychain reads. Droid fails closed because its CLI cannot disable reviewed-repository `AGENTS.md` loading and all tools in the same run. Pi `--no-approve` ignores project-local files for one run; the helper requires Pi `v0.79.0+` plus help output that advertises every required isolation flag because older legacy binaries can ignore unknown flags. The current package is `@earendil-works/pi-coding-agent`; deprecated `@mariozechner/pi-coding-agent` `0.73.x` is intentionally rejected. Pi version/help probes and the review command run from neutral temporary directories, not the reviewed repo. Pi `--no-context-files` removes `AGENTS.md`/`CLAUDE.md`, the resource-disable flags keep `.pi` extensions, skills, prompts, and themes out of the run, `--no-session` avoids writing review sessions, and `--no-tools` prevents built-in read tools from escaping the repository through absolute paths. OpenCode starts from a neutral temporary directory, points at the reviewed repo with `--dir`, disables project config through `OPENCODE_DISABLE_PROJECT_CONFIG=1`, and injects `OPENCODE_CONFIG_CONTENT`; permissions default to deny, allow read/grep/glob, preserve OpenCode's `.env` ask rules, and gate `websearch`/`webfetch` with `--no-web-search`. The injected config also clears command/instruction/plugin arrays and disables write/edit/bash/task/skill/todowrite tools without changing user auth storage. Cursor's documented headless path is print mode with JSON output and workspace-relative project-resource discovery. Because the CLI exposes no per-run flag that disables every current and future project instruction surface, autoreview requires `--cursor-allow-workspace-instructions` (or its environment equivalent) for every Cursor run. Project-local Cursor/Claude hook settings, project MCP config, and global Cursor MCP config remain hard refusals because hooks execute host commands and MCP tools cannot be constrained to read-only review access. Cursor capability probes run from neutral temporary directories with the sanitized engine environment. Review runs set documented `CURSOR_CONFIG_DIR` to an ephemeral configuration that allows workspace reads while denying shell commands and relative or absolute writes. The helper sends review prompts to OpenCode and Cursor over stdin rather than argv and extracts final structured JSON from terminal result/text events. OpenCode and Cursor reject `--no-tools`; Cursor also rejects `--no-web-search` because the CLI does not expose a documented per-run web-search disable flag. diff --git a/.agents/skills/openclaw-small-bugfix-sweep/SKILL.md b/.agents/skills/openclaw-small-bugfix-sweep/SKILL.md index efe6971925f0..db65b5885ad1 100644 --- a/.agents/skills/openclaw-small-bugfix-sweep/SKILL.md +++ b/.agents/skills/openclaw-small-bugfix-sweep/SKILL.md @@ -13,6 +13,7 @@ Triage reviews, proves, and patches local fixes first; publishing waits for Pete Peter always wants to review code before commits. Default flow: + 1. Review each issue deeply enough to prove current behavior and root cause. 2. Fix only easy, high-confidence bugs with narrow ownership and focused proof. 3. Stop with the dirty diff summary, touched files, and test/gate output for Peter's manual review. diff --git a/.agents/skills/openclaw-testing/SKILL.md b/.agents/skills/openclaw-testing/SKILL.md index ca66d370824a..0f1335e7d67a 100644 --- a/.agents/skills/openclaw-testing/SKILL.md +++ b/.agents/skills/openclaw-testing/SKILL.md @@ -150,7 +150,7 @@ commands. tools to require an IMDSv2 token, prove the IAM credentials endpoint returns 404, and compare remote `git rev-parse HEAD` with the full reviewed head SHA. Unset all `CRABBOX_TAILSCALE*` overrides, pass `--network public - --tailscale=false`, clear exit-node/LAN flags, then require `crabbox inspect` +--tailscale=false`, clear exit-node/LAN flags, then require `crabbox inspect` to report `network=public` and no Tailscale state before uploading any script. Upload trusted `scripts/crabbox-untrusted-bootstrap.sh` with `--fresh-pr`; it bootstraps Node 24 and repository-pinned pnpm before executing PR code and diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61346f7de803..fdbc43835701 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1335,6 +1335,7 @@ jobs: ;; lint) pnpm lint --threads=8 + pnpm format:check ;; dependencies) if pnpm run --silent 2>/dev/null | grep -q '^ deadcode:dependencies$'; then @@ -1550,6 +1551,9 @@ jobs: with: install-bun: "false" + - name: Check formatting + run: pnpm format:check + - name: Checkout ClawHub docs source run: | set -euo pipefail diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index 0c6a4349bcaa..0cfdd26bc691 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -552,7 +552,14 @@ jobs: # Create multi-platform manifests create-manifest: - needs: [approve_manual_backfill, validate_publish_config, resolve_build_provenance, build-amd64, build-arm64] + needs: + [ + approve_manual_backfill, + validate_publish_config, + resolve_build_provenance, + build-amd64, + build-arm64, + ] if: ${{ always() && needs.validate_publish_config.result == 'success' && needs.build-amd64.result == 'success' && needs.build-arm64.result == 'success' && (github.event_name != 'workflow_dispatch' || needs.approve_manual_backfill.result == 'success') }} # WARNING: DO NOT REVERT THIS TO A BLACKSMITH RUNNER WITHOUT RE-VALIDATING TAG BACKFILLS. runs-on: ubuntu-24.04 diff --git a/.oxfmtrc.jsonc b/.oxfmtrc.jsonc index 7e11c0e12b58..de4d378b555f 100644 --- a/.oxfmtrc.jsonc +++ b/.oxfmtrc.jsonc @@ -26,6 +26,7 @@ "useTabs": false, "ignorePatterns": [ "apps/", + "CHANGELOG.md", "CLAUDE.md", "docker-compose.yml", "dist/", diff --git a/docs/channels/line.md b/docs/channels/line.md index 7d23c8cebaae..91e761790202 100644 --- a/docs/channels/line.md +++ b/docs/channels/line.md @@ -181,9 +181,7 @@ messages. }, flexMessage: { altText: "Status card", - contents: { - /* Flex payload */ - }, + contents: {/* Flex payload */}, }, templateMessage: { type: "confirm", diff --git a/docs/concepts/usage-tracking.md b/docs/concepts/usage-tracking.md index 89ba19693bea..8a6444ea4cb8 100644 --- a/docs/concepts/usage-tracking.md +++ b/docs/concepts/usage-tracking.md @@ -196,16 +196,10 @@ change: "aliases": { "": { "": "