dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
Aegis ShellGuard is a Rust shell guardrail for AI coding agents. rm -rf, git reset --hard and DROP TABLE wait for your approval; safe commands pass through in under 2 ms.
SecurityRust · TypeScriptGitHub @IliasAlmerekovOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Aegis — the shell guard for AI coding agents. Destructive commands from Claude Code, Codex, or Cursor pause for your approval, with a snapshot taken first — so even a "yes" is recoverable.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Make AI agents ask first. Keep a way back when they don't.
Your AI agent is one rm -rf away from ruining your week. Aegis proxies its shell:
safe commands run instantly, destructive ones need your approval — and where a
provider applies, a Snapshot captures the working state first, so a "yes" can be
restored to what was captured. When no provider applies, Aegis says so instead of
implying an undo it cannot perform.Read the full README ↗Roll back what your AI agent broke.
Aegis sits between an AI agent and your shell. Safe commands run at once.
Destructive ones, like rm -rf or git reset --hard, wait for your approval,
and Aegis saves your work first where it can. If the agent deletes the wrong
thing, one command brings it back.
Install the binary, then add the Claude Code plugin:
npm i -g @iliasalmerekov/aegis
/plugin marketplace add IliasAlmerekov/aegis-shellguard
/plugin install aegis@aegis-shellguard
Claude Code and Codex share one policy and one Audit log (~/.aegis/audit.jsonl).
Other agents go through $SHELL on a best-effort basis.
AI agents delete files and directories, rewrite git history, drop databases, and push things you did not intend to push. Blocking everything makes the agent useless. Blocking too little leaves you restoring from backups. Aegis does three things:
aegis rollback --last restores the git Snapshot, and the sqlite one when it is the configured database. For Docker and the other database Snapshots it prints the aegis rollback <id> line to run.Aegis decides by heuristics, not by understanding your command. It is not a privilege boundary, so it does not stop code that already runs as you. See the threat model, and how it works for risk levels, effect opacity, and the Sandbox.
[!IMPORTANT] Windows users: install inside WSL2. Native PowerShell and
cmd.exeare not supported, and there is no native Windows build.
The plugin is the primary install path for Claude Code. It registers the hooks
and a /aegis:rollback command without editing settings.json. It does not
ship the binary, so install aegis first with npm or Homebrew below.
/plugin marketplace add IliasAlmerekov/aegis-shellguard
/plugin install aegis@aegis-shellguard
npm i -g @iliasalmerekov/aegis
Runs aegis install-hooks --all automatically when Claude Code or Codex config directories are present. Set AEGIS_NPM_SKIP_HOOKS=1 to opt out. While the Claude Code plugin is enabled and installed, that step skips Claude Code, so its hooks run once.
npm and Cargo install the binary only; neither runs the global shell installer or edits your shell startup files. Opt in with aegis setup-shell (see below).
Update notices are opt-in and npm only:
aegis update enable --channel npm # opt in
aegis update status # consent, cache, last check
aegis update check # check the registry right now
aegis update disable # opt out
With this on, the shell proxy checks for a newer release at most once a day
and prints a one-line notice, only on an interactive terminal, never in
aegis watch, --output json, or an agent hook. Aegis never runs npm
itself. It only tells you the version and the exact command to run
(ADR-038).
brew tap IliasAlmerekov/aegis
brew install aegis
Homebrew installs the binary only. Like npm and Cargo, it does not run the global shell installer. Opt in with aegis setup-shell.
curl -fsSL https://raw.githubusercontent.com/IliasAlmerekov/aegis-shellguard/main/scripts/install.sh | sh
Installs the binary, writes a managed block to ~/.zshrc or ~/.bashrc, and hooks into Claude Code and Codex when those config directories already exist. Reload your shell afterwards.
cargo install --git https://github.com/IliasAlmerekov/aegis-shellguard --tag v0.8.0 aegis
Package manager installs are binary-only. To opt in to shell-proxy mode:
aegis setup-shell
This adds a managed block to ~/.zshrc or ~/.bashrc that sets SHELL to the
aegis binary and AEGIS_REAL_SHELL to your real shell. Remove it with:
aegis setup-shell --remove
The convenience installer is Global-first. It installs the binary, writes the managed shell block, and sets up Claude Code and Codex hooks when those config directories already exist. The old Local project-only and Binary-only installer modes have been removed. Package-manager installs are binary-only.
aegis --version # prints version number
aegis -c 'echo hello' # safe, runs immediately, no prompt
aegis -c 'rm -rf /tmp/aegis-test' # danger, interceptor appears, press D to deny
[!TIP] If
echo helloruns right away and the risky command prompts, Aegis is working.
Claude Code and Codex are protected through PreToolUse hooks, not shell-proxy tricks. These hooks intercept Bash commands regardless of $SHELL.
# Claude Code
aegis install-hooks --claude-code
# All supported agents at once
aegis install-hooks --all
Re-run after upgrading to refresh the managed hooks, including SessionStart
effective-state notices, the fail-closed panic layer (ADR-023), and to migrate
any older aegis hook / aegis-rewrite.sh registration to the current shim.
If aegis off is active, each new Claude Code or Codex session visibly reports
that commands use unguarded passthrough; aegis on re-enables enforcement. CI
keeps enforcement active even if the local disabled flag exists and reports that
override at session start.
[!TIP] Other agents: for tools that respect
$SHELL, runaegis setup-shell. For an agent with ashellconfig field, find theshellfield and set it to the output ofcommand -v aegis.
These limits matter when you decide how far to trust Aegis. The full text is in how it works.
sh ./cleanup.sh, needs a Snapshot before it runs. If none is created, you see only "Run once without recovery" or "Deny". Aegis does not inspect the referenced script, and a Snapshot is not a complete backup.sandbox.enabled and sandbox.required stay accepted and ignored, each reported as a deprecated_sandbox_field.sandbox_status = "unavailable" and warns before running unconfined when confinement is missing.First remove Aegis-managed shell blocks and Claude Code/Codex hooks:
aegis uninstall
# Also delete ~/.aegis (audit logs, snapshots, toggle and update state):
aegis uninstall --purge-data
The command keeps data by default and prints its data decision. It preserves
~/.config/aegis/config.toml and unrelated hooks. It checks ~/.bashrc and
~/.zshrc; for a custom startup file, pass --rc-file /absolute/path/to/rc.
If $SHELL still points at Aegis and neither file held a block, it warns you
to rerun with --rc-file.
The binary stays installed so uninstall can finish without a package-manager subprocess. The command prints a removal channel inferred from the canonical binary path, so symlinks resolve. Check it, then remove the binary separately:
| Removal channel | Binary removal |
|---|---|
| npm (global) | npm uninstall -g @iliasalmerekov/aegis |
| Homebrew | brew uninstall aegis |
| Cargo | cargo uninstall aegis (use --root /install/root for a custom root) |
| curl installer | rm -- /path/to/aegis using the printed binary path |
Path inference does not prove package ownership. If the channel is unknown,
check how you installed it and rerun with --channel npm, homebrew, cargo,
or curl. A project-local npm installation is not treated as a global install.
Open a new terminal after removal.
For older versions without aegis uninstall, this fallback removes only the
curl-installed binary at ${AEGIS_BINDIR:-/usr/local/bin}/aegis and its setup:
curl -fsSL https://raw.githubusercontent.com/IliasAlmerekov/aegis-shellguard/main/scripts/uninstall.sh | sh
# Explicit data purge:
curl -fsSL https://raw.githubusercontent.com/IliasAlmerekov/aegis-shellguard/main/scripts/uninstall.sh | sh -s -- --purge-data
The fallback keeps data unless requested and warns if another binary remains on PATH. It prints npm, Homebrew, or Cargo removal advice when detected; it never runs their uninstall commands.
If you removed the package before running aegis uninstall, the binary is gone
but the hooks remain, so the hook shim denies every agent Bash command. Run the
curl fallback above to clean up. It needs jq when ~/.claude/settings.json or
~/.codex/hooks.json exists. It only cleans the rc file chosen by $SHELL (or
AEGIS_SHELL_RC). On Intel macOS, /usr/local/bin/aegis may be a Homebrew link
into the Cellar; the script leaves it alone and tells you to run
brew uninstall aegis.
Neither path touches project-local hooks. Projects where you ran
aegis install-hooks --local keep their ./.claude/settings.json entries and
./.claude/hooks/ files, and need manual cleanup.
| Document | Description |
|---|---|
| How it works | Risk levels, effect opacity, Required recovery, and the Sandbox |
| Product requirements | The normative Aegis 1.0 promise |
| Architecture decisions | The ADR index, every accepted decision |
| Threat model | Security scope and assumptions |
| Config schema | aegis.toml reference |
| Platform support | Linux, macOS, WSL2 details |
| Release readiness | Recorded release-verification evidence |
| Troubleshooting | Install, hook, and integrity problems |
| CI | What the pipeline gates on |
| Performance baseline | Hot-path benchmark baselines |
What still blocks 1.0 is the
1.0 milestone,
the only release gate.