ibara@r1
CAUTION· install onlyPublisher claims: "Enables agents to take over a spare Omarchy computer — its desktop, browser and apps — over the user's own Tailscale network to run tasks and return screenshots, reports and files. Users can watch the screen, send files and take control from a console in the bar." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
- no credential variables read in the code
- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it under the guard. Nothing executable in the bundle ran; the trace covers the install step only. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is ibara@r1 safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-09 and scored it 62/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Destructive command against a filesystem root or device. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
("amend_delivery", &["task_1", "d1", "1", "host_12345678", "/tmp/../etc/passwd"]),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.std::os::unix::fs::symlink("/etc/passwd", ws.join("link")).unwrap();Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…cho '{{\"enabled\":false}}'; fi;;\n stay-awake) touch \"$flag\";;\n allow-idle) rm -f \"$flag\";;\n *) exit 2;;\nesac\n", flag.display() ), …Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if enroll_keys(&mut inventory, request.get("keys"), &std::fs::read_to_string("/etc/passwd")?)? {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.let passwd = std::fs::read_to_string("/etc/passwd").map_err(|_| "The account list could not be read.".to_string())?;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.let passwd = String::from_utf8_lossy(&std::fs::read("/etc/passwd").unwrap_or_default()).into_owned();Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.SystemDb { passwd: "/etc/passwd".into(), group: "/etc/group".into() }Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// A run that crashed must not leave the desktop account's sudo open.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.assert!(lines(dir.join("landed.log")).is_empty(), "no input after the handoff");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why./// `sudo ibara system ARGS…` with this terminal, so sudo asks once.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.std::fs::read_to_string("/etc/passwd")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose._ => "Tailscale is not answering. Start it with: sudo systemctl enable --now tailscaled, then run: tailscale up".into(),Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.//! system parts go through one `sudo ibara system …` (one password prompt).Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell..ok_or_else(|| format!("Account {} is not in /etc/passwd.", cred.uid))Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose..env("DBUS_SESSION_BUS_ADDRESS", format!("unix:path={}/bus", dir.display())),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.//! (`SO_PEERCRED`, named through `/etc/passwd`), and relay its JSON report.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose./// (`agent_account`) and `/etc/passwd`.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.An approval waiting: the toast with Approve, Deny and Always Allow, its desktop notification, and the count on the bar markFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.for path in ["../secret", "a/../../secret", "..", "/etc/passwd", "a\\b", "x\u{1}y"] {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…cho '{{\"enabled\":false}}'; fi;;\n stay-awake) touch \"$flag\";;\n allow-idle) rm -f \"$flag\";;\n *) exit 2;;\nesac\n", flag.display() ),…Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell..env("XDG_RUNTIME_DIR", &dir)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…aves the computer unavailable with recovery guidance; do not bypass it or force-kill the browser. Save/deliver needed files before finish. Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell..env("CUA_DRIVER_RS_ENABLE_WAYLAND", "1")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.for dest in ["relative/path", "/home/riley/../etc/passwd", "/home//riley/x"] {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.let mut begin = json!({ "goal": "Write approval.txt in the task workspace and send it to the computer the agent works from.", "request_id": rid("begin") });Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.- your own account with sudo access on each computerFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.// SAFETY: kill only sends a signal to this test's own stand-in.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.kill -TERM "$pid"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.pid=$(cat "$d/running" 2>/dev/null) && kill -0 "$pid" 2>/dev/null || { echo "omarchy-shell is not running" >&2; exit 1; }Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.assert_eq!(code(s.transfer("hazel", &ack("/home/riley/Downloads/report.txt", 2), None)), "POSTCONDITION_FAILED");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.assert_eq!(code(s.transfer("hazel", &ack("tmp/report.txt", 1), None)), "POSTCONDITION_FAILED");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why..args(["-c", "cat >\"$1\" && chmod 700 \"$1\"", "sh"])Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.if pid=$(cat "$d/running" 2>/dev/null) && kill -0 "$pid" 2>/dev/null; then echo "[{\"pid\": $pid}]"; else echo "No running instances"; fiFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
18 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Destructive command against a filesystem root or device≈ +9 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Unclaimed publisher≈ +8 on the totalClaim mayberrydt: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden instructions≈ +6 on the totalRemove HTML comments, zero-width characters and white-on-white text that carry instructions. Everything the agent is meant to read should be visible to the person reading the file.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Destructive file system command detected≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.