docs(skills): sync CLI and SDK guidance with current APIs - #33
Conversation
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.
Bugbot Autofix prepared a fix for the issue found in the latest run.
- ✅ Fixed: Comparison step uses wrong HOST
- Updated Step 4 to derive HOST directly from TARGET_URL so report paths always match the analyzer output directory.
Or push these changes by commenting:
@cursor push fac08bb7f1
Preview (fac08bb7f1)
diff --git a/plugins/kernel-cli/skills/profile-website-bot-detection/SKILL.md b/plugins/kernel-cli/skills/profile-website-bot-detection/SKILL.md
--- a/plugins/kernel-cli/skills/profile-website-bot-detection/SKILL.md
+++ b/plugins/kernel-cli/skills/profile-website-bot-detection/SKILL.md
@@ -78,8 +78,8 @@
Compare the newest report from each mode rather than concatenating multiple JSON documents:
```bash
-# Set the hostname folder (e.g., chase-com for chase.com).
-HOST=chase-com
+# Derive the hostname folder from TARGET_URL (e.g., chase.com -> chase-com).
+HOST=$(node -e "console.log(new URL(process.env.TARGET_URL).hostname.replace(/\./g, '-'))")
latest_report() {
local reports=("$1"/report-*.json)
[[ -e "${reports[0]}" ]] || return 1You can send follow-ups to the cloud agent here.
Reviewed by Cursor Bugbot for commit 867a159. Configure here.
|
| run | result |
|---|---|
agent-browser -p kernel open https://example.com |
✓ navigates fine |
same + KERNEL_PROFILE_NAME=<pre-created prod profile> |
✗ 400 can't decode JSON body: json: cannot unmarshal string into Go struct field BrowserRequest.profile of type map[string]json.RawMessage |
raw POST /browsers with profile: {name, save_changes: true}, same profile |
✓ session created |
cli/src/native/providers.rs:417 sends profile as a bare string and sets save_changes nowhere in the CLI source, so the API rejects the body before a session exists. The QA notes in the PR description are consistent with this — the agent-browser path passes cleanly as long as KERNEL_PROFILE_NAME is unset, which is why it wouldn't have surfaced.
Affected: the env-table row (L40), the recommended-config export (L51), the whole Profile Persistence section (L55-61), the manual-login step 4 (L161), gotcha 4 (L423), and the quick-reference export (L430).
One of those bullets is wrong independently of the serialization bug: "The profile is created if it doesn't exist" — the object form with an unknown name returns 400 profile not found, so profiles must be pre-created either way.
Two separate fixes:
- This PR (optional, ~2 lines): flag it so the skill stops instructing agents into a 400.
- Upstream:
vercel-labs/agent-browser, not our fork — npm publishes from there, so patchingkernel/agent-browserwon't reach users. ~5 lines inproviders.rsto send{"name": <profile>, "save_changes": true}.
Suggested edit for L51:
# export KERNEL_PROFILE_NAME=mysite # unusable with -p kernel today — see Profile Persistence belowAnd for the Profile Persistence section, if you want it:
> **Note:** `KERNEL_PROFILE_NAME` does not currently work with `-p kernel`.
> agent-browser sends `profile` as a bare string where the Kernel API requires
> an object, so session creation fails with a 400 before the browser starts.
> Until that is fixed upstream, use `kernel browsers create --profile-name`
> and drive the session over CDP.|
LGTM - verified all tests you ran for updates and left comments where i saw discrepancies. |
|
Addressed the
Live-tested with agent-browser 0.33.0: created an ephemeral profile/browser via the CLI, attached over CDP, navigated to Example Domain, closed agent-browser, deleted the Kernel session, verified the profile remained readable, then deleted it. Follow-up queries show zero |
dprevoznik
left a comment
There was a problem hiding this comment.
Thanks for the updates. LGTM!


Summary
Review and update every skill in the
kernel-cliandkernel-sdksplugins against the current Kernel CLI README, the command changes from kernel/cli#140, current CLI source, and live API behavior.This updates all 9 skill documents:
debug-browser-sessiondiff-profile-archiveskernel-agent-browserkernel-authkernel-browser-harnesskernel-cliprofile-website-bot-detectionkernel-python-sdkkernel-typescript-sdkNotable updates
kernel-clireference files for browsers, managed auth, process execution, profiles, and proxiesBrowser.disconnect()The Homebrew command remains
brew install kernel/tap/kernel; the current CLI README'sonkernel/tap/kernelspelling is not copied here.Live QA
A separate QA agent exercised every updated skill against the current CLI/SDKs:
go test ./cmdtar.zstandtarformats and ran the archive comparison workflowagent-browser 0.33.0andbrowser-harness 0.1.7against ephemeral Kernel sessionskernel 0.83.0+playwright 1.61.0@onkernel/sdk 0.83.0+playwright-core 1.62.0https://example.comSafety and cleanup
skill-qa-*browsers and profilesValidation
git diff --checkNote
Low Risk
Changes are documentation and a small test-script fix; no application runtime or security-sensitive platform code is modified.
Overview
Brings kernel-cli and kernel-sdks plugin skills in line with current CLI behavior, linked references, and live API semantics so agents follow up-to-date commands and safety patterns.
Browser diagnostics and routing —
debug-browser-sessionadds soft-deleted session lookup (--include-deleted),browsers logs streaminstead of raw log paths, Chrome-stackbrowsers curlvs VMcurl, and guarded default-proxy A/B viabrowsers update --disable-default-proxy. Reference docs document the same update flags for explicit vs default stealth proxy.Profiles and diffs —
diff-profile-archivesand profile references drop manual zstd/tar handling and misleading.zipflows;profiles download --tois documented as CLI-managed extraction (tar.zst/tar), withjq -Sfor JSON diffs and pre-downloadprofiles getvalidation.Managed auth —
kernel-authis rewritten aroundkernel auth connections(create/update/login/submit/follow/timeline), canonical--field-value/--choice-id, telemetry on connections and logins, and safer cleanup vs profile deletion.Agent tooling —
kernel-agent-browsercorrects launch defaults (stealth opt-in, headless default), documentsKERNEL_PROFILE_NAMEbreakage in 0.33.0 with a CLI create + CDP persistence path, CDP-endpoint session matching for live view, and runtime proxy toggles.kernel-browser-harnessadds EXIT traps, private session JSON files, parallel worker cleanup, and default-proxy updates before harness connect.Org/admin and references —
kernel-cliadds safe operation, project archive/rename, API key rotation /--include-deleted, and org limits. Process reference adds--envand--allocate-tty; proxies add rename andproxies check.Bot-detection skill — Comparative workflow now isolates network path (direct egress on stealth vs default proxy), uses trapped multi-step cleanup, and fixes
test-kernel-bot-detection.tsby removing invalidbrowser.disconnect()and exiting explicitly after the report.SDK skills — Python and TypeScript guides expand server-side vs CDP paths,
try/finallysession deletion, profiles (save_changes, download/rename caveats), proxy check/update,disable_default_proxy, and TypeScript binary via dedicated APIs (notplaywright.execute).Reviewed by Cursor Bugbot for commit 3c32b77. Bugbot is set up for automated code reviews on this repo. Configure here.