Metadata-Version: 2.4
Name: yes-claudio
Version: 0.1.2
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 (10 approvals/day):**
```bash
pip install yes-claudio
yes-claudio app
```

**Unlimited:** buy at [bravoevert.gumroad.com/l/yes-claudio](https://bravoevert.gumroad.com/l/yes-claudio), then:
```bash
yes-claudio activate YOUR-SERIAL-KEY
yes-claudio app
```

> **Prefer `uv`?** `uv tool install yes-claudio` then `yes-claudio app`.

---

## 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 | 10 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)
- Windows/Linux: no extra dependencies

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

---

## Usage

### Start the app (tray + panel)
```bash
yes-claudio app
```

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

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

The hook is registered automatically when you click "Ativar hook" in the panel, or you can enable it from 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 "Hook 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/denylist.json` — custom patterns

---

## License

MIT
