Please do not open a public issue for a security vulnerability. Report it privately instead:
- Email: martin_otis@uqac.ca
- Or use GitHub's private vulnerability reporting if enabled for this repository.
Include a description of the vulnerability, the affected component (skill / agent / command / hook), and reproduction steps where possible.
This repository runs locally on a researcher's machine: no authentication, TLS, or exposed
service by default. The one exception is the optional deploy/form-service/ HTTP API — see
its own notes in .claude/rules/security.md. Realistic threats are
a malicious input file, a malformed request corrupting local state or audit logs, an untrusted
dependency, or a leaked secret — not enterprise compliance scenarios (SOC 2, HIPAA, PCI DSS,
GDPR, ISO 27001 do not apply here).
| Version | Supported |
|---|---|
main / latest tag |
✅ |
There is no long-term support branch; fixes land on main.
Every dependency change goes through pip-audit. Full workflow, CVSS grading, and hashed-
lockfile verification: .claude/rules/security.md.
betterleaks-hook.py (blocks writes containing a detected secret), pip-audit-hook.py (warns
on a CVE in a modified requirements.txt), and prompt-injection-defender.py (warns on
suspicious tool output) run automatically in every Claude Code session working in this
repository. They protect the Claude Code workflow, not an external contributor using plain git.
For plain git, a global pre-commit hook (.claude/hooks/git/, installed by
install-git-hooks.ps1) refuses a commit that adds a secret or personal data - account
paths, Quebec student codes, @etu.uqac.ca addresses, FRQ identifiers, and the machine's own
account name. The privacy-scan CI workflow applies the same rules to every push and pull
request, so a skipped hook is still caught. Real names cannot be detected by pattern: test data
uses fictitious identities only.