Borrowing it
Nothing to install: this file belongs to simular-ai/simulang-js. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/simular-ai/simulang-js/main/CLAUDE.mdgit clone --depth 1 https://github.com/simular-ai/simulang-jsWrote 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/instructions/simular-ai/simulang-js/claude-md)<a href="https://agentmods.dev/instructions/simular-ai/simulang-js/claude-md"><img src="https://agentmods.dev/badge/instructions/simular-ai/simulang-js/claude-md/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/instructions/simular-ai/simulang-js/claude-md"><img src="https://agentmods.dev/badge/instructions/simular-ai/simulang-js/claude-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>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.01923 | $0.01923 |
| Opus 5.5 | $0.00769 | $0.00769 |
| Sonnet 5.5 | $0.00385 | $0.00385 |
| Haiku 4.5 | $0.00192 | $0.00192 |
Grade A, and why
simulang-js CLAUDE.md scanned grade A with 0 findings 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 8d 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.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 146 lines — stays where its author put it; the contents beside it link to each section on GitHub.
@simular-ai/simulang-js
Node.js bindings for the Rust simulang-rs crate (via napi-rs). Cross-platform
automation of desktops and Android devices: apps, windows, accessibility
trees, mouse/keyboard, screenshots, clipboard, audio, and VLM/LLM/STT model
access.
This file ships in the npm tarball alongside index.d.ts and is versioned
with it.
Where the API is documented
Read index.d.ts first — it is the source of truth. Every class,
function, and enum is fully typed (~2100 lines) and carries JSDoc covering
idioms, lifecycle rules, platform quirks, and inter-API trade-offs that types
alone can't express. The JSDoc is generated from doc comments,
so the per-symbol guidance there is authoritative — trust it over any
restatement elsewhere.
Mental model
Machineis the entry point.Machine.local()is the desktop this process runs on;Machine.android(endpoint)is an Android device driven over adb from the host. Apps, windows, and accessibility nodes are obtained from a machine and stay bound to it; mouse, keyboard, and clipboard access are flat methods on the machine itself (moveMouse,typeText,getClipboardString, …). The same code drives any backend — write againstMachineand the handles it returns, and only reach formachine.asAndroid()when an operation has no desktop counterpart.- Calls into the native module are synchronous. No Promises are returned;
Result::Erron the Rust side is translated to a thrown JS exception by napi-rs, so JS callerstry/catchas usual. - Many objects are handles to platform resources (windows, audio devices, accessibility trees, file/directory handles). Their lifetime matters; dropping them can free the underlying resource.
- Check
canSee(),canUseAccessibility(), andcanControl()before a run. Each returnsnullwhen this process can see the screen, use accessibility trees, or control other apps, and otherwise a reason that names what stands in the way and the fix. None of them opens a permission prompt. AskModel.askJsonreturns one JSON value and checks the reply locally against the schema you pass.- Decisions are one
DecisionModel.decide(state, questions)call. Name each question withnoul,choice, orscore. The same name is a property of the result:answers.urgent.probability,answers.dept.choice,answers.severity.nearest(). searchRelative(candidates, landmarks, relation)is a free function (same as Rustsearch_relative). Keepscandidateswhose box sits in a given position relative to at least one landmark — the fixed boxes you measure against. Not a tree walk and not scoped to a window or node. Both arguments areAccessibilityNodearrays from any windows or applications — find them withscoredSearch, a VLM +nodeAtPoint,find, or any other means. Boxes are compared in global-desktop coordinates.relationis(candidate, landmark) => boolean— composeBoundingBoxpredicates however you want (isBelow+overlapsX= under it, sharing its horizontal span;sameRow/sameColumntake a tolerance). Candidates with no box are omitted from the result; order is preserved.- Coordinates live on the global desktop: top-left origin at
(0, 0)on the primary monitor (on Android, the device screen), in OS-native units — the unit is not the same on every platform:- Windows / Linux / Android: physical pixels (raw hardware pixels).
- macOS: logical points — on a 2× Retina display one point spans two
hardware pixels, so a 1920×1080-logical screen is
1920×1080here, not3840×2160.
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.
- 8d ago Changed · +5 lines · +77 tokens per session e52ea84bbd14
- 1mo ago Changed · +2 lines · +84 tokens per session 2bca21acfd5f
- 2mo ago Changed · +13 lines · +200 tokens per session e273fe0faa08
- 2mo ago First seen · 126 lines · 1,562 tokens per session scan A 1153326f7a43
simulang-js CLAUDE.md is an instructions file published in the GitHub repository simular-ai/simulang-js (4 stars, last pushed 2d ago), licensed MIT. It adds 1,923 tokens to every session, about $0.0077 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
simulang-js CLAUDE.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| simulang-js CLAUDE.mdsimular-ai/simulang-js | Instructions file | 4 | 2d ago | MIT | A | 1,923 | Claude Code |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | today | MIT | A | 7,461 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 5,685 | GitHub Copilot |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | today | MIT | A | 4,680 | Codex, OpenCode |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | today | MIT | A | 3,086 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 281k | today | MIT | A | 4,335 | Codex, OpenCode |