pc-bot
README.md
# pc-bot
Agentes de IA controlando o **Windows** — clicando, digitando e navegando da forma mais confiável possível, com um **cursor overlay visível** para o usuário acompanhar cada ação.
## Por quê
O computer use tradicional (ex: cua-driver) depende de uma única árvore de acessibilidade para "ler" a tela. Quando essa árvore está incompleta (browsers modernos, apps Electron, canvas como Google Docs), o clique falha. O pc-bot resolve isso com **camadas**: cada uma tenta ser a mais confiável possível, e o orquestrador cai para a próxima apenas quando necessário.
```
┌──────────────────────────────────────────────┐
│ A · NATIVA (UIA/pywinauto) │ ← mais confiável para apps nativos
│ clica por propriedade real do elemento │
├──────────────────────────────────────────────┤
│ B · BROWSER (CDP/Playwright) │ ← mais confiável para a web
│ clica por seletor DOM real (ref) │
├──────────────────────────────────────────────┤
│ C · PIXEL (pyautogui/OpenCV) │ ← último recurso
│ clica por coordenada / template matching │
└──────────────────────────────────────────────┘
```
Cada ação reporta o **nível de confiança** usado:
- **A** = clique por elemento (árvore UIA do Windows)
- **B** = clique por DOM (navegador via CDP)
- **C** = clique por pixel (fallback — use com cuidado)
## O cursor overlay
Uma janela transparente em toda a tela (via `UpdateLayeredWindow` + alpha por pixel) desenha um **anel colorido** que desliza até onde o agente vai clicar. Ele **não rouba o foco, não intercepta cliques e fica invisível quando não há ação** — o usuário vê exatamente onde o agente está agindo, mas pode continuar trabalhando em outra janela.
## Instalação
```bash
# requer Python 3.11+
pip install -e .
python -m playwright install chromium # baixa o Chromium pro CDP (opcional, só p/ web)
```
## Uso
### CLI
```bash
pcbot state # lista janelas abertas
pcbot find --name "Editor" # busca elementos nativos
pcbot click --name "Salvar" # clica num elemento pelo nome
pcbot click --x 640 --y 400 # clica por coordenada (fallback)
pcbot type "Olá mundo" # digita na janela ativa
pcbot screenshot # captura a tela
pcbot demo # demo do cursor overlay
```
### Como biblioteca (Python)
```python
from pcbot.agent import AgentDesktop
from pcbot.overlay import CursorOverlay
overlay = CursorOverlay() # cursorzinho visível
overlay.start()
agent = AgentDesktop(overlay=overlay)
state = agent.get_state() # janelas abertas
print(state)
result = agent.click(name="Salvar") # camada A (UIA)
result = agent.click(x=640, y=400) # camada C (pixel)
print(result["confidence"], result)
```
### Como MCP server (para qualquer agente de IA)
```bash
pcbot-mcp # só camadas nativas + pixel
pcbot-mcp --browser # adiciona a camada browser CDP
```
Depois, configure seu agente (Claude, Hermes, Cursor, etc.) para apontar o MCP:
```json
{
"mcpServers": {
"pc-bot": {
"command": "pcbot-mcp",
"args": ["--browser"]
}
}
}
```
O agente ganha as tools: `screenshot`, `get_state`, `click`, `type_text`, `find`, `browser_goto`, `browser_dom`, `browser_click`, `browser_type`, `browser_text`.
### Plugins
Plugins são módulos Python em `pcbot/plugins/` descobertos automaticamente pelo orquestrador. Exemplo: um plugin pode expor ações de apps específicos (Spotify, Excel, etc.).
## Arquitetura
| Módulo | Papel |
|---|---|
| `pcbot/overlay.py` | Cursor overlay (janela transparente + anel animado) |
| `pcbot/native.py` | Camada A: UIA via pywinauto (inspecionar, clicar, digitar) |
| `pcbot/browser.py` | Camada B: navegador via Playwright/CDP (DOM com refs) |
| `pcbot/pixel.py` | Camada C: screenshot + clique por coordenada + template matching |
| `pcbot/agent.py` | Orquestrador `AgentDesktop` com regra de confiança A/B/C |
| `pcbot/mcp_server.py` | Exposição como MCP (tools para agentes) |
| `pcbot/cli.py` | CLI (`pcbot …`) |
| `pcbot/plugins/` | Plugins auto-descobertos |
## Testes
```bash
python tests/mcp_client_test.py # conecta um client MCP stdio e chama get_state
```
## Avisos
- **Segurança:** valide o `confidence` em cada resposta antes de agir. Cliques de nível **C** (pixel) devem pedir confirmação ao usuário.
- **Irreversibilidade:** clique errado = ação errada. Para ações sensíveis (apagar, enviar, pagar), o agente deve confirmar antes.
- **Detecção:** cliques sintéticos podem ser detectados por sites que verificam `isTrusted`. Nenhum sistema de automação de desktop escapa disso.
## Roadmap
- [x] Camada nativa UIA (clique/digitação por propriedade)
- [x] Camada browser CDP (DOM com refs, clique real)
- [x] Camada pixel (coordenada + template matching OpenCV)
- [x] Cursor overlay visual (alpha por pixel, sem roubo de foco)
- [x] MCP server (tools para agentes)
- [x] CLI
- [ ] Plugin de OCR (ler texto da tela como fallback de estado)
- [ ] Recording/Playback (gravar trajetórias e repetir)
- [ ] Suporte a múltiplos monitores
- [ ] Modo dry-run (mostrar plano antes de executar)
---
Projeto criado para agentes de IA que precisam de um "par de mãos" confiável no Windows. Feito com ❤️ e commits orgânicos.This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues