Metadata-Version: 2.4
Name: yes-claudio
Version: 0.1.7
Summary: Auto-approve Claude Code permission prompts with a denylist and daily limits
License-Expression: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Requires-Dist: pystray>=0.19
Requires-Dist: Pillow>=10.0

# yes-claudio

> Auto-approve Claude Code permission prompts — with a denylist and daily limits.

## Quick start

**Free (20 approvals/day):**

- **macOS / Linux** (recommended — `pip install` is blocked on Homebrew Python by PEP 668):
  ```bash
  uv tool install yes-claudio && yes-claudio start
  ```
  > Don't have `uv`? Install it with `curl -LsSf https://astral.sh/uv/install.sh | sh` (or `brew install uv`). See [Installation](#installation) for details.
- **Windows:**
  ```bash
  pip install yes-claudio && yes-claudio start
  ```

`yes-claudio start` registers the hook, opens the tray + panel, and asks whether to launch yes-claudio at login. It returns to the prompt; use `yes-claudio stop` to quit the tray. Power users can run `yes-claudio app` instead — same tray, no setup prompts.

**Unlimited:** buy at [bravoevert.gumroad.com/l/yes-claudio](https://bravoevert.gumroad.com/l/yes-claudio), then either:

- right-click the tray icon → **Ativar Licença...** → paste the serial, or
- run `yes-claudio activate YOUR-SERIAL-KEY`.

---

## How it works

yes-claudio installs a `PreToolUse` hook in `~/.claude/settings.json`. Every time Claude Code would show you a permission prompt, the hook intercepts it and returns `allow` — unless the command matches the denylist, in which case it returns `ask` (the prompt appears normally).

| Tier | Daily limit | Price |
|---|---|---|
| Free | 20 approvals/day | $0 |
| Paid | Unlimited | $2 one-time |

The GUI shows a tray icon (green = active, orange = daily limit reached, grey = inactive) and a panel with your approval count and license status.

---

## Installation

**Requirements:**
- Python 3.11+
- macOS: `brew install python-tk@3.14` (tkinter is not bundled with Homebrew Python)
- Linux: distro-provided `python3-tk` package if your Python doesn't ship tkinter
- Windows: no extra dependencies

> No Homebrew on macOS? Install it from [brew.sh](https://brew.sh) (one-liner on the homepage), or use the Astral `curl` installer for `uv` (alternative to brew) and skip Homebrew entirely.

### macOS / Linux

Homebrew Python (and most modern distros) marks the system interpreter as "externally managed" (PEP 668), so `pip install yes-claudio` is blocked. Install in an isolated tool environment instead:

**`uv` (recommended):**
```bash
# install uv once:
curl -LsSf https://astral.sh/uv/install.sh | sh
# or: brew install uv

uv tool install yes-claudio
```

**`pipx` (alternative):**
```bash
# install pipx once:
brew install pipx        # macOS
# or: sudo apt install pipx   # Debian/Ubuntu

pipx install yes-claudio
```

### Windows

```bash
pip install yes-claudio
```

---

## Usage

### Start the app (tray + panel)
```bash
yes-claudio start                # full setup: hook + tray + panel + asks about login auto-start
yes-claudio start --no-autostart # skip the login auto-start prompt
yes-claudio start --yes          # answer "yes" to login auto-start (for automation)
yes-claudio app                  # just the tray (no setup prompts)
yes-claudio stop                 # quits the tray
yes-claudio app -f               # foreground mode (debug; blocks the terminal)
```

### Open panel only
```bash
yes-claudio panel
```

### Activate a license key
```bash
yes-claudio activate XXXX-XXXX-XXXX-XXXX
```

The hook is registered automatically by `yes-claudio start`. To toggle it later, use the panel ("Auto-sim ativo") or the tray menu.

---

## Denylist — what's always blocked

These patterns are always sent back to you for review (`ask`), regardless of tier:

| Pattern | Reason |
|---|---|
| `rm -rf` | Recursive deletion |
| `git push --force` / `git push -f` | Force push |
| `git reset --hard` | Discards uncommitted changes |
| `DROP TABLE` / `DROP DATABASE` / `TRUNCATE` | Destructive SQL |
| `sudo` | Privilege escalation |
| `dd` | Low-level disk write |
| `mkfs` / `fdisk` / `parted` | Disk partitioning |
| `chmod 777 /etc` | System-wide permission change |
| `curl \| bash` / `wget \| bash` | Remote code execution |
| `shred` | Secure file deletion |
| `shutdown` / `reboot` / `halt` | System power commands |
| `/etc/`, `/usr/`, `/bin/`, `/sbin/` | System paths |

You can add custom patterns via the "Editar Denylist" button in the panel (supports regex or simple wildcards with `*` and `?`).

---

## Manual configuration (no GUI)

yes-claudio writes this entry to `~/.claude/settings.json`:

```json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "yes-claudio hook",
            "timeout": 10,
            "_tag": "autoconfirm-hook"
          }
        ]
      }
    ]
  }
}
```

To disable, remove the entry above or uncheck "Auto-sim ativo" in the panel.

---

## Uninstall

To remove all traces of yes-claudio:

```bash
yes-claudio uninstall
```

This removes:
- The hook entry from `~/.claude/settings.json`
- `~/.config/autoconfirm/` (approvals log, license token, custom denylist)
- The package itself (via `uv tool uninstall` or `pip uninstall`)

Use `--yes` / `-y` to skip the confirmation prompt (useful in scripts).

You can also uninstall from the panel GUI via the red "Desinstalar yes-claudio" button at the bottom.

---

## FAQ

**How do I know it's active?**
Green tray icon in the menu bar. You can also run `yes-claudio hook` manually and pipe JSON to it — it should return `{"hookSpecificOutput": {"hookEventName": "PreToolUse", "permissionDecision": "allow", ...}}`.

**What happens when I hit the daily limit?**
The hook returns `ask` — Claude Code shows the normal permission prompt. The panel banner turns orange and displays an upgrade link.

**Is it safe?**
Dangerous commands (see denylist above) are always escalated to you. The hook is fail-safe: any internal error returns `ask`, so Claude Code never auto-approves silently on a crash.

**Can I use it on multiple machines?**
Yes — up to 2 activations per serial. To move to a new machine, contact support to reset.

**Does it work with `--dangerously-skip-permissions`?**
No — yes-claudio detects that mode and steps aside. That mode already bypasses prompts; there's nothing to approve.

**Where is data stored?**
- `~/.config/autoconfirm/data.json` — daily counts and approval log
- `~/.config/autoconfirm/license.json` — license token (local, no server)
- `~/.config/autoconfirm/machine_id.txt` — stable per-machine ID for license binding
- `~/.config/autoconfirm/denylist.json` — custom patterns

---

## License

MIT
