invisible_dotsBLOCK
Open-source, self-hosted alternative to OpenAI Dots, Grok Bot. Built to be undetectable by anti-bot systems.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
<img alt="invisible_dots, an open-source, self-hosted alternative to OpenAI Dots, Meta Muse, Grok Bot, Manus Cue and Claude Cowork. An animation of what a Dot does: asked once in its chat to save a shop's invoices every month and send the total to Telegram, it works on a computer of its own (a desktop, a terminal, files and a Firefox that keeps the shop's login), writes the steps down as a skill, asks before it adds the monthly automation, and then sends the total every month; several Dots, one computer each." src="docs/images/hero-light.gif" width="100%">
Open-source, self-hosted alternative to OpenAI Dots, Grok Bot. Built to be undetectable by anti-bot systems.
Quickstart
You need Node 24+, Go 1.25+, Git and hardware virtualization (x86-64), plus an OpenRouter key.
Windows (PowerShell):
winget install -e --id OpenJS.NodeJS.LTS; winget install -e --id GoLang.Go; winget install -e --id Git.Git git clone https://github.com/feder-cr/invisible_dots; cd invisible_dots npm ci; npm run build --workspace @invisible-dots/cli node apps/cli/dist/invisible-dots.mjs setup --all node apps/cli/dist/invisible-dots.mjs server
Linux (Ubuntu 24.04):
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash - && sudo apt-get install -y nodejs git && sudo snap install go --classic git clone https://github.com/feder-cr/invisible_dots && cd invisible_dots npm ci && npm run build --workspace @invisible-dots/cli node apps/cli/di
11452585307bOBSERVED · 2026-10-11Install
Commands as the repository documents them. They are shown, not run.
git clone https://github.com/feder-cr/invisible_dots; cd invisible_dots
git clone https://github.com/feder-cr/invisible_dots && cd invisible_dots
uv pip install --require-hashes --only-binary :all:
uv pip install --require-hashes
git clone https://github.com/feder-cr/invisible_dots
git clone https://github.com/feder-cr/invisible_dots
Host compatibility
What the documentation claims. We have not run a compatibility test.
| Host | Status | Notes |
|---|---|---|
| claude-code | mentioned | |
| codex | mentioned | |
| copilot | mentioned | |
| cursor | mentioned | |
| openclaw | mentioned |
What it tells the agent
The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.
--- name: invisible-playwright description: Use the Dot's browser identities for any task on a website or search on the web: which identity to use, opening and closing one, and when a plain download is simpler than a browser. --- # The browser identities Your browser is invisible_playwright: a real Firefox that a site sees as a person at a computer. How to drive a page (finding a page, the order to try things in, what a page can tell) is in the browser server's instructions, which your system prompt carries. This file is about the identities. Use the browser when a task needs a website; for a plain download or an API, `exec` with `curl` is simpler. ## Identities A browser identity is one person on the web: its own profile, cookies, logins and fingerprint, kept on disk between uses. - `browser_identity_list` shows the identities, which are open, and how many may be open at once. - `browser_identity_create` makes one, closed. Give it a name only: it then leaves through this computer's own network, which is right unless the person asked for this one identity to use a proxy of theirs. - `browser_identity_launch` opens it on your desktop. The first launch of a new identity can take minutes. - `browser_identity_close` closes it; its profile, cookies and logins stay. - Every page tool takes the `identity_id` of an open identity, and acts on that identity's one page. - Reuse the identity that is already logged in to a site instead of making a new one, and keep one identity per person or account you act as: two accounts in one identity are one person to anyone looking. - A second identity is for what must not touch the first. The usual case: signing up somewhere and needing a mailbox for the verification. Open a throwaway-mail site in another identity, take the address, type it into the form in the first one, and go back to the other for the link. Close an identity with `browser_identity_close` once the task no longer needs it, before you answer: an open browser holds memory on your computer. ## Your own skills When you work out how to do something on a site that you will do again (where its login is, which steps a form needs, what blocks you), write it down as a skill of your own: /home/dot/skills/<name>/SKILL.md, the same shape as this file.
Trust audit
BLOCKgrade F · trust 49/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- none-observed
- Shell
- declared (3 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
exec(body: ExecRequest): Promise<ExecAnswer> {fs.StringVar(&s.display, "display", envOr("INVISIBLE_DOTS_DISPLAY", agentd.DefaultDisplay), "X display for screenshots and exec (INVISIBLE_DOTS_DISPLAY)")if (token.created) logger.info("created the API token", { path: token.origin });logger.info(`API token in ${server.paths.apiTokenPath}; stop with Ctrl+C (Dots keep running)`);DATABASE_URL: postgres://postgres:[email protected]:5432/postgres
DATABASE_URL: postgres://postgres:[email protected]:5432/postgres
expect(describeDatabaseTarget({ kind: "pg", url: "postgres://user:[email protected]:5432/x" })).toBe(const TOKEN = "test-token-0123456789abcdef";
const token = "env-token-0123456789abcdef";
const TOKEN = "dot-token-0123456789";
const TOKEN = "cli-test-token-0123456789";
const TOKEN = "test-token-0123456789";
app.log.1.gz
app.log.2.gz
app.log.3.gz
app.log.4.gz
app.log.5.gz
importlib.import_module(name)
importlib.import_module(module_name)
ask(guest, exec(`echo ${"very-long-argument-".repeat(20)}`));new Function(THEME_BOOTSTRAP)();
new Function(THEME_BOOTSTRAP)();
digest = hashlib.sha1(name.encode("utf-8")).hexdigest()[:_HASH_LENGTH]return hashlib.sha1(tool_call_id.encode()).hexdigest()[:9]
digest = hashlib.md5(Path(tmp, "transactions.csv").read_bytes()).hexdigest()
Gates applied: no_behavioural_pass.
11452585307bfull audit observations/trust-audit/skill/feder-cr__invisible_dots.json · Report an issue / request a re-scanAudit history
Every audit this skill has had.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 11452585307b | BLOCK | F | 49 | first audit |
Questions
What does the invisible_dots skill do?
Open-source, self-hosted alternative to OpenAI Dots, Grok Bot. Built to be undetectable by anti-bot systems.
Is invisible_dots safe to install?
No — not without reading the findings first. The audit graded it F (49/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What can invisible_dots access on my machine?
The audit observed that it runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.
Which assistants does invisible_dots work with?
Its documentation mentions claude-code, codex, copilot, cursor and openclaw. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (11452585307b), read on 2026-10-11. The repository is watched, and a new audit runs when it changes — this is the first audit.