Skip to main content

AppLedger honest check

Honest security feedback, in plain language, for apps people build with AI tools such as Claude Code, Codex, Cursor and Lovable.

AppLedger checks your app folder with independent scanners and explains what they find in everyday words: what is wrong, why it matters, and what to do. It also writes a fix request you can hand straight to the AI tool that built the app, then checks again.

What it checks

Scanner Finds
Trivy Leaked passwords and keys, outdated libraries with known security problems, risky container setup
Opengrep Dangerous code patterns: SQL injection, command injection, unsafe data loading, debug mode left on
SonarQube (optional, local mode) Code quality and more security hotspots, if you already run a SonarQube server

Each run produces, in <your-app>/.appledger/:

  • report.html: a score, who may use the app right now (only you, your team, the whole company), and every problem in plain words
  • fix-prompt.md: a ready-made fix request for your coding agent
  • findings.json: the same findings for tools and dashboards

Two ways to run

Mode What you install Where your code goes
Hosted (default) Only this package Source files Git would commit are zipped, sent over HTTPS to appledger.net, scanned and deleted right after. Secret files are never sent. You confirm before the first upload of each folder
Local (--local or APPLEDGER_MODE=local) Also Trivy, Opengrep and the Opengrep rules Stays on your computer. With a connection key, only a summary goes to your dashboard (see below); --no-dashboard skips even that

What gets uploaded in hosted mode

  • Sent: files Git would commit (git ls-files, including new files that aren't ignored). Outside a Git repository, .gitignore is still honoured.
  • Never sent: .env and .env.* (except .env.example, .env.sample, .env.template), *.pem, *.key, *.p12, *.pfx, SSH keys, .npmrc, .pypirc, .netrc, *credentials*.json, service-account*.json, secrets.*, the folders cert, certs, secrets, .ssh and .aws, .claude/settings.local.json, Terraform state, password files, Ansible Vault files, Kubernetes/Helm secret manifests, certificates and similar (full list in src/appledger/uploadpolicy.py). The server drops such files again as a second safety net.
  • Skipped: dependencies, build output, media, documents and data files (CSV, spreadsheets, slides, SQL, logs, data dumps) and files over 1 MB.

If a secret file is committed to Git or not ignored, the check reports it as a problem by file name. Its content is never read or sent.

See exactly what would be sent, and what is left out and why, without uploading anything:

python -m appledger path/to/your-app --list-files

The first hosted check of a folder asks you to confirm. In scripts and scheduled runs, pass --yes. If the code belongs to your employer or a client, make sure you're allowed to upload it, or use local mode.

Install

Claude Code plugin (recommended: adds the guided check-my-app skill):

claude plugin marketplace add contentasoftware/appledger
claude plugin install appledger@appledger

In the Claude Code desktop app, add the marketplace contentasoftware/appledger in the plugin settings instead. Start a new session, then ask: "Is my app safe to share?" or "Add this app to AppLedger".

MCP server only (needs uv):

claude mcp add appledger -- uvx --from appledger appledger-mcp

Command line:

pip install appledger
python -m appledger path/to/your-app

Step-by-step guide with troubleshooting: https://appledger.net/docs/

Version 0.2.0 (upload preview, consent, secret-file exclusion, scheduling) is being released to PyPI; until then pip install appledger gets 0.1.x.

Company dashboard

Create a free account at appledger.net to keep every app your people check in one ledger: owner, grade, score trend, who may use it and which AI tool built it. Create a connection key under "Connect a computer", then save it on each computer:

python -m appledger --connect al_your_key

Or tell Claude: "Connect AppLedger with this key: al_…". The key is saved in ~/.appledger/key; APPLEDGER_KEY overrides it and --disconnect removes it.

From then on each check also saves a summary to your dashboard: the app's name, score, grade, problem counts, the list of problems found (level and short title, up to 60; never code or file paths), and the scanners used. Never the code.

You can also add an app in the web app with Add app: register it without code, or upload a zip to check it in the browser (the zip is scanned and deleted the same way).

Scheduled checks

python -m appledger path/to/your-app --schedule weekly --yes   # or daily
python -m appledger --schedules                                 # list
python -m appledger path/to/your-app --schedule off             # stop

Uses Windows Task Scheduler on Windows and cron on macOS and Linux. Hosted scheduled checks need the one-time --yes consent; add --local to schedule local checks instead. --quiet prints one line per check.

Local mode setup

  1. Trivy: winget install AquaSecurity.Trivy (Windows) or brew install trivy (Mac)
  2. Opengrep: download from the releases page and put it on your PATH
  3. Rules: git clone --depth 1 https://github.com/opengrep/opengrep-rules.git ~/.appledger/opengrep-rules
  4. Check: python -m appledger --doctor

Repository layout

Path What
src/appledger/scanner.py Scanners, plain-language translation, report and fix request
src/appledger/client.py Picks the files to send (honouring .gitignore) and sends them to the hosted service
src/appledger/uploadpolicy.py The full list of secret files that are never uploaded, used by client and server
src/appledger/service.py Server side: unpacks an upload safely and scans it
src/appledger/server.py Local MCP server used by the plugin
plugin/ Claude Code / Codex plugin with the check-my-app skill
tests/mcp_smoke.py Calls every MCP tool like an agent would

License

MIT. The Opengrep community rules used by the scanner have their own license (Commons Clause); check it before using them in a paid service.

Metadata

Release files for appledger 0.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for appledger 0.2.2
File Size Uploaded
appledger-0.2.2.tar.gz 39.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for appledger 0.2.2
File Interpreter ABI Platform
appledger-0.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 81.8 kB

Release files / appledger-0.2.2.tar.gz

Download URL appledger-0.2.2.tar.gz
Size 39.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b433a74af6c88ecb8b87fc6cd4cac975214ba7f6793762df17900a04a328ab12
BLAKE2b-256 checksum
How to use checksums
9f0b216c87399a3f3149805db627ba06566607764c5ae3cfe1f65f9f56a47001
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release files / appledger-0.2.2-py3-none-any.whl

Download URL appledger-0.2.2-py3-none-any.whl
Size 42.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
93b0ce5292009b653e0cc195ec5e78cc7a08d15e7116d8ad7b8e3b9589e017f0
BLAKE2b-256 checksum
How to use checksums
83b05c5436f87f4386c6744ae45a2aced5bf7699da09d66aa7595ac285e62f7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.2 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page