# DataBye: llms.txt (Hermes machine-actionable playbook) # Version: 1.3.0 | Slug: databy | License: MIT # Repo: https://github.com/686f6c61/DataBye # Landing: branch landing | Plugin (SKILL.md) | Design: DESIGN.md > Spain-only GDPR / LOPDGDD / AEPD **plugin** for Hermes. > Short on time? Give Hermes this file and let it run end-to-end. > Deterministic CLI owns state; agent drives browser + real send with user OK. > Always explain before email or browser. Default = local drafts only (no surprise SMTP). ## Short on time / poco tiempo 1. Install Hermes. 2. Paste or attach this `llms.txt` and ask Hermes to run DataBye for you (consent, explain-before-act, drafts). 3. Prefer full plugin install for audit: `./install.sh` or `.\install.ps1`. ## Absolute scope IN: Spain, RGPD + LOPDGDD + AEPD, Spanish infomediary roster, Lista Robinson (web_form). OUT: US people-search, CCPA/CPRA, California DROP, non-roster recipients, CAPTCHA solvers. ## Hard rules (NEVER bypass: enforced in code + agent contract) 1. No `--consent` → REFUSE intake/start/send flows that persist dossier or contact brokers. 2. NEVER *require* DNI/NIE/NIF/SSN/passport. Do not invent or demand ID. Optional local attachment only if user opts in (path under .databy/attachments/, mode 0600). Never store the ID *number* in dossier fields; never put it in default email body unless user explicitly included it in a custom body. 3. Email recipients MUST be official addresses from `references/brokers/*.json` only. 4. Rate limit ≥ 20 seconds between real sends / agent mail actions. 5. `confirmed_removed` ONLY with explicit re-scan (`--rescanned` / reescaneo note). 6. NO CAPTCHA solvers / anti-bot bypass. 7. Lista Robinson = guided `web_form` via `databy robinson`: NOT `send-email` deletion. 8. ALWAYS explain to the user what will happen before browser or email (Hermes contract). 9. `preview` must NOT write dossier; example-mail to self does NOT contact brokers. 10. `watch-replies` is opt-in (`watch_replies_enabled: false` by default); never SMTP; prefer `--from-file` offline. ## Install (Hermes discovers directories containing SKILL.md) ```bash # Recommended copy mkdir -p ~/.hermes/skills rsync -a --delete /path/to/DataBye/ ~/.hermes/skills/databy/ # Symlink ln -s /absolute/path/to/DataBye ~/.hermes/skills/databy # external_dirs in ~/.hermes/config.yaml # skills: # external_dirs: # - /absolute/path/to/parent_of_databy # Script ./scripts/install_hermes_skill.sh # or --link make hermes-install ``` Verify: `hermes skills list | grep -i databy` OR `ls ~/.hermes/skills/databy/SKILL.md` Guide: `pack/HERMES_INSTALL.md` One-liner clone+install: ```bash git clone https://github.com/686f6c61/DataBye.git && cd DataBye && ./scripts/install_hermes_skill.sh ``` ## Data directory - If `HERMES_HOME` set → `$HERMES_HOME/databy` - Else → `./.databy` - Permissions: dir 0700, files 0600 - Key files: `dossier.json`, `ledger.json`, `audit.jsonl`, `drafts/`, `exports/`, config ## CLI entrypoint ```bash python3 scripts/databy.py … # after Hermes install: python3 ~/.hermes/skills/databy/scripts/databy.py … ``` Commands: ``` start | inicio | wizard | preview | setup | doctor | intake | brokers | next | record send-email | batch-draft | status | report | robinson | watch-replies | replies config | tasks | due | audit | export-case | run-dry | version ``` Templates (`--template`): `gdpr` | `oposicion_marketing` | `acceso_solo` | `seguimiento` | `explicacion` Mail customize: `--subject` `--body` `--body-file` `--template-file` `--append-note` (recipients still roster-only). Send modes: `draft` (local file) | `compose` (paste-ready) | `agentmail-payload` (JSON for agent): none are SMTP by themselves. ## Agent do-X-then-Y (preferred script) ```text 1. CALM INTRO - Explain Spain-only scope, never *require* DNI (optional local attachment only), drafts-first. - Prefer: databy preview OR databy wizard / wizard --open - Optional: databy preview --example-mail --to-self USER@email.es (local package for user to send to themselves; do NOT email brokers) 2. CONSENT + DOSSIER - Prefer: databy wizard (export wizard-export.json) OR databy start --consent --name … --email … - Alias inicio = start. --yes skips extra pauses but STILL prints explanations. - If not using start/wizard: setup → doctor → intake --consent (multi email/phone/alias) - DNI/NIE never required for intake/start; optional id_document path only with consent 3. DRAFTS (no network) - Explain before_drafts (templates/ux / explain.py). - run-dry OR batch-draft → local drafts only. 4. REAL SEND (user OK required) - Explain before_send. - User or agent with explicit OK: send-email / AgentMail / Gmail using CLI payload. - Official roster emails only; rate limit ≥ 20s. - record ledger transitions as appropriate (submitted → awaiting_processing …) 5. ROBINSON - databy robinson → follow web_form playbook → databy robinson --done - Do NOT use send-email to "delete" from Lista Robinson. 6. REPORT + RECHECK - databy status | databy report --html → exports/informe.html - databy due / tasks (~1 month recheck) - confirmed_removed only after rescan 7. OPTIONAL REPLIES - Only if user opts in: config set watch_replies true - Classify offline: watch-replies --from-file mensajes.json - Labels: aceptado | piden_datos | rechazado | acuse | desconocido - NEVER send mail from this path ``` ## Success criteria - Consent recorded; no ID *numbers* in dossier (optional local attachment path only if user opts in). - Drafts and/or sends only to roster official emails; audit trail in audit.jsonl / ledger. - User saw explanations before drafts and before any real send/browser. - HTML/markdown report available when requested. - Robinson checklist completed if user wants advertising exclusion. - Recheck tasks scheduled; no premature confirmed_removed. - Tests pass: `python3 -m unittest discover -s tests -v` ## File map ```text SKILL.md Hermes skill frontmatter + agent contract DESIGN.md Architecture 1.3 llms.txt This playbook README.md Human install/usage + caso de uso CONTRIBUTING.md PR / scope notes NOTICE / LICENSE Attribution + MIT pack/HERMES_INSTALL.md Calm Hermes install pack/DOCKER_QA.md Container QA notes landing branch Static Spanish landing (Coolify git_branch=landing) scripts/databy.py CLI scripts/ledger.py State machine + locks scripts/dossier.py Consent + PII (no ID numbers; optional local attachment) scripts/wizard.py HTML wizard generator scripts/emailer.py Templates + compose/agentmail scripts/preview.py Preview / example-to-self scripts/robinson.py Lista Robinson checklist scripts/replies.py Optional reply classifier scripts/brokers.py Roster loader scripts/batch.py Batch draft scripts/report.py Status / MD / HTML scripts/scheduler.py Due / recheck scripts/audit.py audit.jsonl scripts/filelock.py Exclusive locks scripts/explain.py Calm UX strings scripts/config.py Incl. watch_replies_enabled scripts/install_hermes_skill.sh references/brokers/*.json references/playbooks/ email-lane, lista-robinson, agent-loop, hermes-tools references/legal/gdpr-es.md references/state-machine.md templates/emails/ gdpr_es, oposicion, acceso, seguimiento, explicacion, … templates/consent/ frase, largo templates/ux/que_va_a_ocurrir.md templates/ux/wizard.html CHANGELOG.md tests/ unittest suite .github/workflows/ci.yml .github/workflows/release.yml # tags v* → GitHub Release + source tarball ``` ## Roster IDs (official emails in JSON: do not invent) axesor, informa, informa_clientes, iberinform, einforma, datacentric, camerdata, dato_capital (NETAMO), equifax_es, lista_robinson (web_form) ## Refuse / escalate - User asks for US broker deletion / CCPA → refuse; explain Spain-only. - User offers DNI "to speed things up" → do not demand it; explain never required; optional local attachment only if they insist; never store the number in dossier; never invent ID. - User asks to email a non-roster address → refuse; show brokers list. - User wants CAPTCHA solved → refuse; queue human_task if needed. - Fear / uncertainty → run preview; read templates/ux aloud; do not rush send. ## Verify ```bash python3 -m unittest discover -s tests -v python3 scripts/databy.py doctor python3 scripts/databy.py version # optional: ./scripts/qa.sh (docker/podman; skips cleanly if unavailable in some envs) ``` ## Links - Repo: https://github.com/686f6c61/DataBye - Releases: https://github.com/686f6c61/DataBye/releases - Actions: https://github.com/686f6c61/DataBye/actions - Landing: https://github.com/686f6c61/DataBye/tree/landing