CommunityCoding & Developmentgithub.com

labs-graduation

Move a feature out of Control UI Labs, either on by default or still off by default. Use when asked to promote, graduate or ship a Labs feature.

What is labs-graduation?

labs-graduation is a Claude Code agent skill that move a feature out of Control UI Labs, either on by default or still off by default. Use when asked to promote, graduate or ship a Labs feature.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/clawdbot/clawdbot/tree/main/.agents/skills/labs-graduation

Installed? Explore more Coding & Development skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Graduate a Labs feature

Graduation removes a feature's Labs switch and makes it a normal feature. Two separate decisions, made by the owner before any code:

  1. Leave Labs: the feature gets a permanent home (its own settings or plugin page) and loses Labs wording.
  2. Default: on by default, or still off by default.

They are independent. #197029 first tried both, then shipped only the first: Advisor left Labs but stayed off. Ask which one is wanted; do not assume "graduate" means "on by default".

Precedents: Swarm on by default (#136514), Tool Search on by default (#154068), native plugin UI on without a Labs opt-in (de50262a1f96), Labs features moved into Settings (#145460), Advisor out of Labs and still off (#197029).

Before the PR

  • Measure cost or risk on the real route if the feature costs money or tokens, or changes behavior for users who never opted in. Today's numbers from mocks or unit tests are not proof. #197074 merged a cache-cost claim from a mock that live providers disproved, and was reverted in #197175. Use the live measurement the feature's own PRs already established, and put the numbers in the PR body.
  • Settle known defects first. Advisor's graduation waited for its fork cache fixes (#197203, #197223, #197224, #197226) because default-on would have charged every user the uncached cost.
  • Find the enable path that remains. After the Labs row goes, users must still be able to turn the feature on from the UI. A bundled plugin uses Settings → Plugins → → Enable; a core feature needs its settings page. Add a switch only if none exists.

The change

  1. Default. Change it only if the owner chose on by default: a bundled plugin's enabledByDefault in openclaw.plugin.json, or the core config default. An existing explicit false (or the feature's opt-out value) must keep working, and an existing true must stay on. Never add a migration that rewrites saved config to change someone's choice.
  2. Labs. Remove the entry from ui/src/pages/labs/labs-registry.ts and everything only it used: labs-page.tsx rows or slots, labs-feature-state.ts entries, strings and tests.
  3. Docs. Move the feature's section out of docs/concepts/experimental-features.md into its own reference page. Leave a one-paragraph note there with the old anchor, saying it graduated, its default, and where to turn it on. Update the "Labs includes ..." list and the "Currently documented flags" table.
  4. Wording. Remove "Experimental" and "OpenClaw Labs" from the manifest description, package description, README, plugin summary, and any user- or model-facing text such as prompt prefixes.
  5. Generated files. Regenerate, never hand-merge: pnpm config:docs:gen, pnpm plugins:inventory:gen. Control UI locale artifacts (*.meta.json, *.tm.jsonl, catalog-fallbacks.json) stay out of the PR per ui/AGENTS.md; the locale refresh workflow updates them. pnpm ui:i18n:verify must pass.
  6. Upgrade proof. Only for a default change: prove across a real upgrade that no saved entry gets the new default, an explicit off stays off, and an explicit on stays on. A default that stays the same needs no upgrade case; #197029 dropped the one it had built for default-on.

Proof in the PR

  • Control UI screenshots, inspected for private data before upload: Labs before and after, and the enable path working on a real Gateway. Attach them with gh pr comment <n> --attach '<file>#<alt text>'.
  • The enable path tested end to end: the switch saves the expected config and takes effect without a restart.
  • The feature's tests and the Labs page tests pass; the test-lines ratchet does not grow.
  • Docs claims match code. ClawSweeper caught Advisor's "at most one review per everyMinutes", which was false with everyToolCalls on.

After merge

The new location only appears in builds that include the merge. Tell users the exact path, and that older builds still show the Labs switch.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

1password

Set up and use 1Password CLI for sign-in, desktop integration, and reading or injecting secrets.

acp-router

Route plain-language requests for Claude Code, Cursor, Copilot, OpenClaw ACP, OpenCode, Gemini CLI, Grok Build, Qwen, Kiro, Kimi, iFlow, Factory Droid, Kilocode, or explicit ACP harness work into either OpenClaw ACP runtime sessions or direct acpx-driven sessions ("telephone game" flow). For coding-agent thread requests, read this skill first, then use only `sessions_spawn` for thread creation. Codex chat binding defaults to the native Codex app-server plugin unless ACP is explicit or background spawn needs ACP.

add-model-provider

Add and live-prove a model provider with non-interactive config one-liners, without exposing credentials.

agent-transcript

Requested GitHub PR/issue agent transcripts: redact, trim, preview, and insert safely.

apple-notes

Create, view, edit, delete, search, move, or export Apple Notes via the memo CLI on macOS.

apple-reminders

List, add, edit, complete, or delete Apple Reminders and reminder lists via remindctl.

auto-qa

Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.

autoreview

Structured code review through the shared OpenClaw agent-skills installation.

bear-notes

Create, search, and manage Bear notes via grizzly CLI.

blacksmith-testbox

Run Blacksmith Testbox for CI-parity checks, secrets, hosted services, migrations, or builds local cannot reproduce.

block-kit

Use proactively for structured or interactive Slack replies, and when asked to author or validate native Slack Block Kit JSON.

blogwatcher

Monitor blogs and RSS/Atom feeds for updates using the blogwatcher CLI.

blucli

BluOS CLI (blu) for discovery, playback, grouping, and volume.

bluebubbles

Send and manage iMessages via BlueBubbles, including attachments, tapbacks, edits, replies, and groups.

browser-automation

Use when controlling web pages with the OpenClaw browser tool, especially multi-step flows, login checks, tab management, or recovery from stale refs/timeouts.

camsnap

Capture frames or clips from RTSP/ONVIF cameras and local webcams, including USB pan/tilt/zoom control.

canvas

Present HTML on connected OpenClaw node canvases, navigate/eval/snapshot, and debug canvas host URLs.

channel-message-flows

Use when running QA Lab channel message flow evidence.

clawdtributor

Clawtributor PRs here, last week or another window: discover conversation refs, recheck GitHub, rank by impact.

clawhub

Search ClawHub for plugins by default, or skills and agent Templates when requested; add Templates; install, verify, update, uninstall, publish, or sync skills.

Related Skills