SkillAgentSearch skills...

CopperOS

Open Source agentic browsing assistant for Chromium-based browsers

Install / Use

claude mcp add Jesse0502 -- npx -y github:Jesse0502/CopperOS

If the server publishes to npm under a different name, use that package instead โ€” check the repo README.

About this skill
๐Ÿ”Œ

MCP Server

Model Context Protocol server

Quality Score

72/100

Category

Automation

Supported Platforms

Claude Code
Claude Desktop

Our assessment of CopperOS

CopperOS scores 72/100 on our quality scale, 2648th of 2,896 Automation skills we index.

Its MCP Server is 56 KB long, well organised into 31 sections with 18 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.

It has 10 GitHub stars, so there is little community track record yet; judge it on its content.

Substance
21/30
Structure
20/20
Description
12/15
Adoption
4/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated today, so CopperOS is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit โ€” read the skill file before letting an agent act on it.

CopperOS compared with similar skills

All 4 of these similar skills score higher than CopperOS; compare them before choosing.

SkillScoreStarsUpdatedFormat
CopperOS (this skill)by Jesse05027210todayMCP Server
Agent-Reachby Panniantong10097.2k6d agoCLAUDE.md
headroomby headroomlabs-ai10075.3ktodayCLAUDE.md
CowAgentby zhayujie10047.4ktodayCLAUDE.md
Scraplingby D4Vinci10087.5k1d agoMCP Server

Frequently asked questions

How do I install CopperOS?
Run claude mcp add Jesse0502 -- npx -y github:Jesse0502/CopperOS. The install tabs above show the steps for each supported agent.
Which AI agents does CopperOS work with?
It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
Is CopperOS safe to use?
It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is CopperOS still maintained?
The repository was last updated today, so CopperOS is actively maintained.
<img width="1230" height="454" alt="CopperOS-Banner" src="https://github.com/user-attachments/assets/188a612f-5722-4d58-9184-9ea006a7e903" />

CopperOS is an open-source AI agent for Chrome. You type a task in a side panel, and it reads, clicks and types in your own tabs, signed in as you. Every step shows in the panel, and it asks before it submits anything.

Add to Chrome ยท Website ยท Setup guide ยท Pricing

Run it on CopperOS's hosted model (sign in with Google, free weekly trial, no key needed), or on your own computer with the model you choose: Ollama, OpenRouter or OpenAI. See Known limits before assuming something is a bug, and Contributing if you'd like to help.

Perception is accessibility-tree first (cheap, exact), with badged screenshots escalated automatically only when the tree goes blind. Input goes through CDP so events are genuinely trusted rather than synthesized in page JS.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   WebSocket    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  broker/  (Node/TS) โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  extension/  (MV3)   โ”‚
โ”‚  โ€ข Ollama /v1 API   โ”‚  {id,op,params}โ”‚  โ€ข chrome.debugger   โ”‚
โ”‚  โ€ข tool definitions โ”‚                โ”‚  โ€ข ref โ†’ coordinates โ”‚
โ”‚  โ€ข agent loop       โ”‚  {id,ok,data}  โ”‚  โ€ข humanized input   โ”‚
โ”‚  โ€ข holds API key    โ”‚                โ”‚  โ€ข AX snapshots      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

The extension is hands only โ€” it holds no config and makes no decisions. The broker is brains only โ€” it never sees a pixel coordinate.

The model is reached through Ollama's OpenAI-compatible endpoint (/v1) rather than the native /api/chat. The compat layer gives real tool_call ids, so parallel tool calls pair up unambiguously, and it accepts image blocks inside tool-result messages โ€” which the vision escalation depends on.

Setup

Step-by-step guide: copper.jassydev.com/setup.

You need Node.js 20 or newer and a model that supports tool calling โ€” an OpenRouter or OpenAI API key, or a model in Ollama. Vision is optional: it lets the agent use screenshots when the accessibility tree goes blind.

git clone https://github.com/Jesse0502/CopperOS.git
cd CopperOS/broker
npm install
npm start

Then load the extension: chrome://extensions โ†’ enable Developer mode โ†’ Load unpacked โ†’ select extension/. Keep only one copy of CopperOS enabled โ€” the broker serves one client at a time (see Troubleshooting).

Click the CopperOS toolbar icon to open the side panel. It opens on the chat, whoever you are. On the hosted service (see The hosted service) nobody has to sign up before they have seen it: the first message they send brings up a popup asking them to Continue with Google, and the message goes as soon as they are in. If a broker is running on this computer, the extension notices (a plain HTTP request to port 7331, every few seconds while the panel is on the cloud; a WebSocket would knock out the broker's live client) and asks, signed in or not: a popup says CopperOS is running on this computer and offers Switch to this computer or Stay in the cloud. Switching lasts as long as that broker runs: if it stays gone for 15 seconds, the panel goes back to the cloud, where a sign-in is kept. Staying, or choosing Cloud in Settings, is not asked again until the broker stops and starts again. While a broker is running (or the panel is on it), Settings shows Cloud / This computer at the top; a choice made there is remembered. The dot in the panel's header is green when connected, grey when nobody is signed in, red when the broker or the cloud cannot be reached; a broker chosen in Settings that is not running shows how to start it. Choose a provider, key and model under Settings, then type a task.

Using Ollama

Pick a model with tools capability (ollama show <model> lists them):

ollama serve                  # or just run the desktop app
ollama list                   # what you already have
cp .env.example .env          # optional: set OLLAMA_MODEL to a model from `ollama list`

With Ollama as the provider, the broker checks it at startup and warns if it is unreachable or if the model is not installed, rather than failing mid-task.

CLI alternative:

npm run task -- "find the pricing page and tell me the cheapest paid tier"

How perception works

snapshot returns the accessibility tree as ref-tagged lines:

[e11] link "Products"
[e12] textbox "Search" value=""
[e28] button "Sign in"

The model acts with click(ref: "e28"). The extension resolves the ref to a backendNodeId, gets a live box model, and drives the pointer there. The model never handles coordinates, so it cannot invent one.

A ref names one element for as long as it is on the page, across snapshots, and refs are kept per tab. A navigation clears the table, but numbering carries on, so a ref from the page before raises an unknown ref error instead of pointing at some other element. The error goes back to the model as a normal tool result, and it re-snapshots. That is the intended recovery path, not a failure.

Every action reports what it changed. Since refs are stable, click, paste, press_key and the rest re-read the page afterwards and return the difference: + for what appeared, ~ for an element whose line changed (a value, checked, expanded), - for what is gone. After a navigation, or a change too big to read as a list, the result carries the whole page instead. The model no longer spends a turn on a snapshot after every action, and it can fill several fields in one response.

Actions wait for what they set off before reporting: the page going quiet (300ms with no requests that matter), or a new tab opening. A click that changes nothing is back in about half a second. Filling a field without submitting sets nothing off, so it does not wait at all.

Vision escalates automatically. snapshot scores the tree and attaches a badged screenshot when it looks unreliable: >30% of interactive elements unlabeled, a <canvas> present, or nothing interactive at all. Badge N on the image is ref eN โ€” one vocabulary across both channels. Badges are drawn on the captured bitmap in an OffscreenCanvas, never injected into the page, so nothing shifts under the click you are about to make.

A text-only model gets no screenshots at all: OpenRouter refuses a request with an image in it for such a model ("No endpoints found that support image input"). The broker checks OpenRouter's model catalog, or Ollama's /api/show, before each task. Without a screenshot, an unreliable snapshot comes with a note to wait and snapshot again. When a provider can't say (OpenAI), the first refusal marks the model as text-only, and the request is resent without its images.

This is the main cost lever: an accessibility snapshot runs 2โ€“5KB against 100KB+ for a screenshot of the same page.

Google Sheets

Sheets draws its grid on a canvas, so the accessibility tree has the toolbar, the menus and the sheet tabs, and not one cell. On a sheet, three tools reach the cells another way:

  • sheet_read fetches the sheet's own CSV export with your existing Google login and renders it as a table with column letters and row numbers. A snapshot of a sheet starts with a preview of A1:J20 rendered the same way, in place of a screenshot.
  • sheet_write enters a whole block of values in one call. It goes to the first cell through the Name box, types each value (the first character as a real key press, which opens the cell for editing), and presses Tab and Enter between cells. Then it reads the block back and lists any cell that does not show what was written, such as a value Sheets autocompleted from the column.
  • sheet_select selects a cell or range through the Name box, so toolbar buttons, menus and press_key shortcuts (Delete, Mod+b, Mod+z) apply to it.

press_key takes modifiers anywhere: Shift+Tab, Mod+z (โŒ˜ on a Mac, Ctrl elsewhere), Alt+Enter, with an optional repeat. Copy, cut and paste shortcuts are refused, because they would use your clipboard. type and paste can leave out the ref to write into whatever has focus.

Configuration

broker/.env:

| Variable | Default | Meaning | |---|---|---| | OLLAMA_MODEL | minimax-m3:cloud | Must support tools; vision too, or escalated screenshots are wasted. | | OLLAMA_HOST | http://127.0.0.1:11434 | Ollama server. /v1 is appended. | | OLLAMA_NUM_CTX | 32768 | Context window. Ollama's own default is far too small here โ€” one snapshot can be several thousand tokens. | | OPENROUTER_API_KEY | โ€” | Enables OpenRouter as a provider. Choose it in the extension's Settings page. | | OPENROUTER_MODEL | deepseek/deepseek-v4.1-flash | Any OpenRouter model id that supports tools. | | APPROVAL_MODE | submits | all gates every click, submits gates form submissions and clicks the model flags destructive, none gates nothing. | | PORT | 7331 | Broker WebSocket port. Must match BROKER_URL in extension/background.js. | | JEV_AI_API_KEY | โ€” | Enables Jev: task rounds, check-ins, memory ranking and the other judgments. Nothing else depends on it; loops run without it. | | TASK_MAX_ROUNDS | 15 | Most fresh-context rounds one message can start while Jev says there is more to do. | | SUPERVISOR | off | on starts new chats with the supervisor on. Each chat's own setting is the Supervisor button in the panel. | | CHECK_IN_EVERY | 10 | Steps between check-ins on a tracked task. 0 turns them off in every chat, whatever the Supervisor button says. | | FRESH_CONTEXT_TOKENS | 25000 | Context size at which a check-in hands the task over to a fresh round. |

Answers and tasks

With Jev enabled, each message is sorted first: work to do, a question or comment the agent can answer from the chat ("how many did you apply to?", "why did you skip that one?"), or small talk. The last two get a reply in words with the agent's tools switched off. The task on record is left as it was, so a follow-up question never starts browsing or replaces the task. A message that may carry the task on, including a complaint about how it's going ("I asked you to colour the rows"), counts as work. If an answer really needs a page, the agent says so, and "go ahead" sends it to look.

Loops

"Keep applying until I tell you to stop", "do this nonstop" or just "loop" makes a task a loop: it repeats until you press Stop. Rounds end and fresh ones start from a brief, as with any long task, but nothing judges whether it is finished. A question for you (or a detail it doesn't know) is skipped and recorded instead of waited on, so a loop never sits idle on one. An action that needs your approval is still put to you, and the loop carries on once you answer. "Continue" picks a stopped loop back up. A message that says when to finish ("50 more, then stop", "for the next 30 minutes") turns it back into a task that ends. A loop also stops itself after 5 rounds in a row that record nothing (LOOP_STALLED_ROUNDS), because by then it is stuck.

With Jev, classifyIntent decides whether a message asks for a loop, sets an end, or carries on the task on record. Without Jev, or when Jev doesn't answer, the message's plain words decide (loopFromWords in jev.ts): "loop", "don't stop", "nonstop" and "until I tell you to stop" start one; "stop the loop", "don't continue" and questions like "what does the loop do?" never do. Loops are the one kind of task tracked without Jev, since only you end one. A loop started that way carries your last few messages into every round's b

Truncated for display โ€” read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars10
CategoryAutomation
Updated13h ago
Forks2

Languages

TypeScript

Trust signals

92/100

From repository metadata: license, adoption, age and documentation. Not a code audit โ€” see the Safety scan above for what the skill file itself contains.

1 low1 info
CopperOS โ€” MCP Server: Install & Safety Check | SkillAgent