Open the live app · Research · Specification
ApproveLens checks whether an AI tool's approval view faithfully represents its raw payload. It runs entirely in the browser and helps expose data that a normal dialog can omit or render invisibly.
- Unicode TAG-block payloads, decoded into readable ASCII
- Bidirectional controls and terminal control characters
- Zero-width characters, unusual spaces, and variation selectors
- Primitive JSON values that are absent from the approval text
- A visible projection that labels suspicious characters
- A safe projection and downloadable machine-readable report
ApproveLens is a display-fidelity tool. A clean report does not prove that an action is safe, and the tool never authorizes an action.
There is no server-side component. The page makes no network requests after it loads, uses no analytics or storage, and processes pasted content only in the current browser tab. User-controlled content is rendered with DOM text nodes rather than HTML injection.
The site also sets a restrictive Content Security Policy and rejects inputs longer than one million characters. See SECURITY.md for the threat model and reporting process.
Any static web server works. For example:
python -m http.server 8080Then open http://localhost:8080.
Node.js 20 or later is required for the test suite. The application itself has no runtime dependencies.
npm test
npm run checkThe deterministic analysis engine is in src/analyzer.js. Its JSON output uses the approvelens.report.v1 schema.
Research has demonstrated a fidelity gap between raw tool payloads and the text rendered for human approval, including invisible Unicode TAG-block content. Existing Unicode scanners are broad text utilities, while agent inspectors focus on protocol traffic. ApproveLens concentrates on the exact raw-payload-versus-approval-view comparison. The sources and product landscape are documented in docs/RESEARCH.md.
Bug reports, test cases, accessibility improvements, and adapters for approval-log formats are welcome. Read CONTRIBUTING.md before opening a pull request.