Skill for AI agents · Claude · Codex · Antigravity · Apache-2.0

A software's privacy is written in its code.

A skill for your AI agent that compares what the system really does with what the privacy notice, records and contracts say. It finds the gaps, documents them with file and line, and prepares the questions for the controller, the DPO and legal counsel. It never declares "compliant".

ExaminedProvenUnknown

Version 1.4.2 · by Samuele Cucurnia and Pietro Previtali · not a substitute for a DPO or a lawyer

Apache-2.0Free, including for professional use
Standard library onlyPython; PDFs use reportlab
51 automated checkson fake apps and pages with known flaws
Never "compliant"four declared states and ready-made questions

Why it exists

A privacy notice says what should happen. The code says what does.

Many privacy reviews stop at the documents. But it is the software that processes the data: whoever writes the notice often does not know that a page loads fonts from a US server, or that "delete account" only deactivates it.

A typical review
With gdpr-sentinel
"The website is GDPR compliant"
Four states, never "compliant": every gap with file, line, legal reference and risk to people
The notice read on its own
Notice against code: what the system really collects, sends to third parties and keeps
"There is a cookie banner"
What the browser loads before any choice: fonts, analytics, videos, maps
"Retention as per policy"
Is there a job that deletes? Does it match the declared periods? And the backups?
Generic questions to the DPO
Ready-made questions for controller, DPO, counsel and suppliers, each with the material it needs

The two skills

Privacy and security, with the same method

gdpr-sentinel works on its own. With appsec-sentinel it shares the audit folder and produces a single PDF report: Art. 32 is handed to the twin skill.

Privacy

gdpr-sentinel

Technical and documentary GDPR/ePrivacy review of the processing the system actually performs.

  • Map of real processing and the A–N controls matrix
  • Notice against code, cookies, suppliers, retention, rights
  • Structured gaps, one per cause, with file and line
  • Questions for controller, DPO, counsel and suppliers, with the material they need
Security

appsec-sentinel

Application and cloud security assessment: code, configuration, APIs, infrastructure, supply chain.

  • Authorization gate before any active test
  • Findings with a state: reproduced, confirmed by code, hypothesis, not verifiable
  • Coverage with real denominators: files, endpoints, controls
  • The security side of Art. 32, linked to the privacy gaps
The two skills share an audit folder and produce a single PDF report
From privacy to security and back: security <repo> and privacy <repo> hand the work to the twin skill.

Who it is for

DPOs and privacy consultants

Technical evidence with file and line to put next to the documents, and questions already worded for the controller and suppliers.

Public bodies, schools, associations

Anyone running a web application who needs to know whether the notice really describes what the software does with members', users' and staff data.

Developers and small teams

Privacy by design before release: trackers, logs, retention, deletion and export checked in the code.

The method

Fourteen controls, from the processing map to Italian specifics

First an automatic pre-pass that is always the same (suppliers, retention, privacy clues in the code), then every control filled in by hand by answering its minimum questions. A control holding only the template text or only the automatic evidence does not pass delivery.

  1. Processing map and rolesControllers, processors, joint controllers; flows, copies, logs, backups, AI providers. Who the controller is when the software serves several organisations.
  2. Principles and legal basesArts. 5 and 6: the same legal basis in notice, records and code; consent is free only if the service does not depend on it.
  3. Special categories, criminal data, minorsArts. 9 and 10: health, judicial, biometric data, minors; third-party data entered by users.
  4. TransparencyArts. 13 and 14: is the notice reachable, complete and consistent with interfaces, contracts and code?
  5. Cookies and trackingePrivacy and the Italian DPA guidelines: what runs before the choice, and whether the banner really offers a refusal.
  6. Data subject rightsAccess, erasure, portability: what remains after "delete account", what is missing from (or too much in) the export.
  7. Retention and deletionDeletion jobs, soft deletes, replicas, logs, backups: real periods against declared periods.
  8. Privacy by design and securityArts. 25 and 32: personal data in logs and URLs, declared versus real encryption; linked to appsec-sentinel findings.
  9. Suppliers and agreementsArt. 28: every supplier that receives data, its agreement and whether the notice names it.
  10. International transfersWhat leaves the EEA, even just the browser's IP address towards fonts and videos, and under which mechanism.
  11. GovernanceArts. 24, 30, 35–39: records, DPIA, DPO appointment and independence; empty templates versus real documents.
  12. Incidents and data breachesArts. 33–34: detection, register, notifications; the decision always stays with the controller.
  13. Profiling, AI and marketingArt. 22: automatic scores and decisions, including on workers; marketing consent not pre-ticked.
  14. Italian and sector specificsRemote monitoring of workers (Art. 4, Law 300/1970), geolocation, health, schools, ACN/NIS2.

Anatomy of a gap

Every gap also says how proven it is

Pick a state to see what it means and what it takes to move up a level. Example taken from the public test bench.

HIGHThe notice rules out transfers outside the EEA, but every page loads fonts from Google's servers
Stateconfirmed by code or configuration
ControlsD (transparency) and J (transfers) · Art. 13(1)(f); Art. 44 GDPR
Referencessrc/app/layout.tsx:12 · public/privacy.md:31
ObservedThe shared layout includes fonts from a Google domain: every visitor's IP address reaches a US supplier before any choice.
Risk to peopleData sent to a third party without the notice saying so; no way to object.
ActionServe the fonts from your own domain, or update notice and records and assess the transfer mechanism.
QuestionFor the controller: is loading from Google intended? For the DPO: should it be listed among the recipients?
RefutationA verifier other than the author, in a new session, looked for a font proxy or a build exclusion and found none (outcome "holds").

Measures, not promises

How much it finds, and how alike two runs are

Public test bench: a fake members' portal with a privacy notice and 15 known flaws, plus 5 decoys that look like problems but are not. Then repeated runs on a real web application, whose true list of gaps nobody knows.

15 of 15
known flaws found, in both independent runs
0 of 5
false alarms on the decoys (technical cookie, local font, office coordinates…)
63%
agreement between two runs on the real application, after the "one gap = one cause" rule (44–46% before)
≈ ½
of all the causes found across several runs is seen by a single run: on a large app use double
ControlKnown flaw in the bench (examples)
EAnalytics loaded without consent, while the notice says no analytics tools are used
I · JError monitoring with personal data and session replay, supplier not declared
CDiagnoses and medical certificates collected with absences, while the notice excludes health data
F"Delete my account" only deactivates it: the data stays
NHigh-precision GPS position of members at every shift, with no retention period
MNewsletter consent pre-ticked

A second bench, changing language and controller: a school website in PHP with 15 defects (health data of minors in the enrolment form and on the public noticeboard, notices kept past their publication period, excessive staff data in the transparency section, a single pre-ticked consent covering photos, identity documents in a public folder) and 5 decoys. Two independent runs: 15 of 15 each, 0 false alarms.

What these numbers do not say. The benches use problem classes the skill asks about explicitly: it measures whether the method is applied, not whether everything is found. Agreement says how alike two runs are, not how complete they are. Details in BENCHMARK (Italian).

Automation

Scripts that speed things up without deciding for you

Python standard library only, except the PDF (reportlab) and the cookie scan (playwright). Each one states its own limit; none decides whether processing is lawful.

ScriptWhat it doesDeclared limit
gdpr_prepass.pyDraft records and suppliers, retention and privacy clues in a fixed order; pre-fills only the technical evidence of the matrixSame result across two runs; clues are not gaps
privacy_scan.pyClues in the code for trackers, cookies, consent, special categories, minors, geolocation, logs, rights, marketing, documentsHeuristic: every line must be read
draft_ropa.pyDraft Art. 30 record and supplier list from the code, subdomains includedAll "hypothesis": roles and legal bases are confirmed by the controller
draft_dpia.pyDraft DPIA sheet (Art. 35) from the processing map, with necessity indicatorsNot a DPIA, and does not decide whether one is needed
retention_check.pyEvidence of deletion in the code, compared with declared periodsLack of evidence is not a breach
cookie_scan.pyCookies, storage and third parties before consent, in a clean browserLocal URLs only, or with the controller's written confirmation
check_matrix.pyChecks the A–N matrix, the map and gaps.csv: unfilled controls, gaps without a line, missing refutationsMechanical: does not judge the merits
merge_audits.py · apply_refutations.pyMerges several runs by cause and measures agreement; applies the outcomes of the independent refutationA cause seen by one run only is no less true
redact_check.py · check_delivery.pySecrets and personal data in the files; one-step delivery checkA clean result does not prove the review is right
build_report_pdf.pyAmber PDF report with gaps, questions, plan and comparison between runsNo "compliance" percentage

The scripts are tested against a fake app and a fake portal with known flaws (tests/run_checks.py). Short English guide: README.en.md in the repository.

PDF report

A document to hand to the controller

Cover, summary, processing map, A–N matrix, prioritised gaps, questions for controller, DPO, counsel and suppliers, action plan. Amber theme for privacy; with appsec-sentinel there is one single report. Click a page to enlarge it.

Cover · privacy
Summary and priorities
Matrices
With appsec-sentinel · security

Options: --sintetico for management, --lang en for English labels, --previous to compare with an earlier review.

Installation

Ready in two minutes

  1. Download gdpr-sentinel.skill from the repository's Releases (and appsec-sentinel.skill if you want the security side).
  2. Upload it from the skills settings.
  3. Type /gdpr-sentinel static <repo>: it will ask for the controller, the scope and the material available before starting.

Commands

One word and it starts

Type the command after the skill name. Every command also works with its Italian name (static = statica, refute = smentita, close = chiudi…). Chat, gaps and reports follow your language.

CommandWhat it does
static <repo>A–N review from code and documents, static analysis only
double <repo>Two independent runs, merge by cause and refutation of high-priority gaps
prepass <repo>Automatic pre-pass: suppliers, retention, privacy clues
notice <repo>Privacy notice against code (control D)
cookie <repo> [url]Cookies and third parties before consent (control E)
retention <repo>Real deletion and declared periods, backups included (control G)
suppliers <repo>Suppliers and transfers, with the questions for the agreements (controls I and J)
draft-register · draft-dpiaDrafts of the Art. 30 record and of a DPIA sheet, all "hypotheses to validate"
data-subject-requestSheet, checks and reply texts for data subject rights
questions · refute · closeQuestions for decision-makers; independent check of the gaps; delivery check
pdf · compare · security <repo>Report, comparison of two reviews, hand-off to appsec-sentinel for Art. 32

Limits

What it does not do

  • It does not declare compliance, give "GDPR scores" or replace a DPO or a lawyer.
  • It does not decide legal bases, roles or whether a DPIA is needed: it proposes them as hypotheses and asks.
  • It cannot see contracts, records or appointments you do not give it: it marks them "not verifiable".
  • It does not visit live websites without the controller's written confirmation.
  • It does not change the software or the documents: it proposes actions.
  • It does not take personal data or the controller's documents to third-party services.
Responsible use. Use it on your own systems or with the controller's mandate. Reviews contain details about how personal data is processed: keep them out of Git and public repositories.

Frequently asked questions

FAQ

Will it tell me whether my website is GDPR compliant?No, on purpose. It reports what it observed, what it confirmed in the code, what remains a hypothesis and what it cannot verify, with the questions for whoever can decide. The final assessment belongs to the controller with the DPO and, if needed, a lawyer.
Does it need access to the live website?No. static works on code and documents. The cookie scan in a browser must only be run on local URLs or with the controller's written confirmation.
Is the draft record of processing the Art. 30 record?No: it is a draft derived from the code, entirely "hypotheses to validate". Roles, legal bases, countries and retention periods are confirmed by the controller.
Why do two runs sometimes find different gaps?A large app has many things to look at and each run sees part of them. That is why double exists: two independent runs, a merge by cause and an agreement measure. On the real test application agreement is 63%.
Does it work with agents other than Claude?It has been tried once on Codex and on Antigravity. That is not yet a compatibility guarantee: a scored measurement is on the roadmap; paths and limits are in docs/ALTRI-AGENTI.md.
Do I need appsec-sentinel too?No. If it is installed, control H gaps (security of processing) link to its findings and the report becomes a single one.
Where do the working files go?Into a private folder created outside the repository. Secrets and personal data never enter the reports: a redaction check verifies it before delivery.