letta-ai/letta-code is an agent harness for building assistants that retain memory, identity, and experience across interactions instead of treating each task as isolated. Developers use it through local, desktop, browser, or messaging interfaces for interactive or continuously running agents, and its catalogue entries configure the agents' skills, instructions, rules, and behavior.
Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add letta-ai/letta-code --skill browser-usegit clone --depth 1 https://github.com/letta-ai/letta-codeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/letta-ai/letta-code/browser-use)<a href="https://agentmods.dev/skills/letta-ai/letta-code/browser-use"><img src="https://agentmods.dev/badge/skills/letta-ai/letta-code/browser-use/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/letta-ai/letta-code/browser-use"><img src="https://agentmods.dev/badge/skills/letta-ai/letta-code/browser-use.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 2 findings, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Privilege Escalation · line 99 Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.Fix: Avoid sudo/root unless strictly required. Prefer least-privilege patterns. If elevation is needed, document the justification and scope.
- medium Server-Side Request Forgery · line 134 Code issues a request to a loopback, link-local, or private-range host. This can reach internal services not meant to be exposed and is a common SSRF pivot.Fix: Avoid requests to loopback/link-local/private hosts from skill code. If internal access is intended, document it and validate the target against an allowlist.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00097 | $0.03173 |
| Opus 5.5 | $0.00039 | $0.01269 |
| Sonnet 5.5 | $0.00019 | $0.00635 |
| Haiku 4.5 | $0.00010 | $0.00317 |
Grade B, and why
browser-use scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 1mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Asks for rootmediumPrivilege escalation
A mod that escalates privileges can change anything on the machine, not only the project.
Use a disposable profile and a fixed port. Chrome refuses to run as root How it starts
The opening of the file, as written. The whole thing — 325 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Browser Use with CDP
Drive the browser through its native Chrome DevTools Protocol over the
remote-debugging WebSocket. This works with zero dependencies: launch the
browser with --remote-debugging-port, then talk JSON over fetch and the
built-in WebSocket global (available in Bun and Node ≥ 22 — no ws package).
If the project already has Playwright or Puppeteer installed, using it is usually simpler — reach for raw CDP when no automation library is available, when protocol-level control is needed, or when recording a deterministic visual demo.
Protocol reference: https://chromedevtools.github.io/devtools-protocol/.
The running browser's exact schema is at http://127.0.0.1:<port>/json/protocol;
tip-of-tree docs can differ from the installed version.
Visible by default when a display exists
When the computer has a display, prefer a visible (headful) browser for any task the user might watch or take over: clicking or typing, forms, sign-in, checkout/payment, CAPTCHAs or bot protection, and user handoff. Most browser tasks exist because plain HTTP is not enough; a headless browser is more likely to trigger bot protection and gives the user no way to observe or step in. Visible does not mean pixel-driven: keep operating the page over CDP, and the user sees every action in the window.
Use headless mode only for work the user explicitly wants in the background and that cannot require interaction or handoff, such as read-only scraping, CI, or screenshot/PDF generation, or when no display exists. A headless page does not satisfy a request to open or reopen a site in a browser the user can see.
When the user asks to review, watch, or take over, leave that browser window open after the task. Do not kill or close it before replying.
Workflow
- Find a Chromium-based browser (below). If none exists, see "No Chrome installed".
- Launch with a dedicated profile and remote debugging. Never attach to the user's normal profile unless explicitly asked.
- Discover targets via
/json/list; pick the"page"target by URL or title. - Connect to its
webSocketDebuggerUrland enable only the domains you need (usuallyPage,Runtime,DOM,Input; addNetwork,Logwhen debugging). - Inspect before acting: find elements by accessible name, label, text, role, stable ID, or placeholder — not generated classes or child indexes.
- Act through
Input.*for user-like interactions; useRuntime.evaluatefor inspection, coordinate math, and setup with no meaningful user interaction. - Wait on observable state, never fixed sleeps alone.
- Verify the result (DOM state, URL, screenshot, console/network events).
- Clean up temporary background work: stop screencasts and close the WebSocket. Kill a browser you launched only when the user did not ask to review, watch, or take over the visible window.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 1mo ago Changed · -39 lines 3c98f7be0b95
- 1mo ago First seen · 364 lines · 97 tokens per session scan B 5a098559482f
browser-use is a skill published in the GitHub repository letta-ai/letta-code (3,684 stars, last pushed today), licensed Apache-2.0. It adds 97 tokens to every session and 3,173 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it B with 1 finding (asks for root). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-02.
Other skills, from other repositories
computer-use
A guide to building agents that operate graphical interfaces through screenshots, mouse actions, keyboard input, and waits. It explains how to identify interface elements and safely repeat the observe, decide, and act cycle.
notte
Deploy browser automations as scheduled, API-callable serverless Functions — plus stealth sessions, vault-backed login, captcha solving, and natural-language agent runs via the Notte CLI. Turns any browser flow into a deterministic Bitterbot-callable endpoint, ideal for crystallized skills + dream-engine cron…
browser-actionability-debug
Diagnose browser UI tests or real browser checks where an element appears visible but cannot be clicked, copied, hovered, or focused. Use for Playwright/Chrome/browser automation failures involving overlays, splash screens, opacity transitions, pointer-events, elementFromPoint mismatches, clipboard assertions, or…
node-inspect-debugger
Debug Node.js via --inspect + Chrome DevTools Protocol.
e2e-setup
Set up Playwright e2e automation tailored to this team and app. Probes the running app (auth mechanism, API surface, spec availability), interviews with recommendations instead of open questions, scaffolds the playwright/ folder, and records every decision in playwright/AUTOMATION.md for the other e2e skills to read.…
verify-fix
Re-test a bug fix after a developer resolves it. Pulls the original bug from Jira, re-executes the repro steps in the browser, checks for regressions, and updates the bug status. The final step in the SDT workflow before a ticket moves to Done. Use when: "verify fix", "retest", "is this fixed?", "check BUG-123"…