What shipped
Agent Ledger is a runnable local MVP for AI tool inventory and cleanup planning. It includes:
- A dependency-free Python web server in
app.py. - A local inventory/scoring/export package in
agent_ledger/. - A static browser workbench in
static/. - Seed CSV and JSON data in
samples/. - A CLI path for demo creation, imports, repo scans, and exports.
- A smoke script in
scripts/smoke.py. - Required markdown and CSV/JSON export artifacts generated under
exports/current.
Architecture
- Local-first storage: the active workspace is a plain JSON file at
data/workspace.json. - No external APIs or secrets: demo mode, scoring, scanning, and exports run entirely locally.
- Python stdlib only:
http.server,csv,json, and filesystem utilities keep setup simple. - Thin frontend: the browser UI renders dashboard views, import controls, editable ledger fields, scan controls, and export links over the local API.
- Deterministic scoring: risk and value scores are generated from explicit rules in
agent_ledger/core.py, with risk reasons retained for review and export. - Conservative repo scanning:
.envfiles are reduced to variable names before signal matching, avoiding secret value storage.
Trimmed scope
- No hosted backend, login, accounts, teams, billing, or permissions.
- No direct Google Workspace, Microsoft 365, Slack, Okta, GitHub, finance, or SaaS admin integrations.
- No drag-and-drop polish, ZIP bundling, or editable scoring weights.
- No policy enforcement or automated permission changes.
- No guarantee of complete AI discovery. Imported, scanned, and survey-discovered evidence is visible and should be reviewed by a human.
Limitations
- CSV normalization is forgiving but not exhaustive for every finance or SaaS export format.
- Expense matching uses simple vendor/name matching and may create duplicate rows when vendor names are vague.
- Repo scanning is static pattern matching. It finds useful signals but does not prove runtime usage or permission scope.
- The web app asks for repo paths as text because browsers cannot freely read local directories without additional packaging.
- Scoring is intentionally deterministic and simple. It should be tuned with real audit outcomes before production use.
- Exports currently write to
exports/currentand overwrite prior files in that folder.
Suggested next steps
- Add a review queue for merging duplicate tool rows.
- Add editable scoring weights and show point-by-point score explanations in the UI.
- Add a downloadable ZIP export.
- Add CSV template downloads from the UI.
- Add a small local desktop wrapper or file picker for safer repo selection.
- Add tests for scanner patterns, import normalization, and recommendation edge cases.
- Add optional connectors later, but keep the current local/demo mode as the default safe path.