Local API key vault and editor for every .env file on your machine. Scan, view, add, update, delete keys via clean local UI with atomic writes, auto-detect services, live key validation, rotation workflow, cross-file search, master file generation, soft reveal password, audit logging, and MCP server mode for Claude Code integration.
12 tools with mixed quality. Naming is verb-forward and clear (scan_env_files, load_env_file, add_key, etc.), following verb_noun convention well. Descriptions are present and substantive (avg ~150 chars), explaining WHAT and WHEN. However, input schemas are visible only for 6 of 12 tools in the provided code snippet, the remaining 6 (scan_env_files, validate_key, rotate_key, search_keys, generate_master_file, unlock, get_audit_log, detect_service) lack explicit schema definitions in the excerpt. Parameter descriptions are present where schemas are shown, but several tools lack type constraints (e.g., 'files' array in rotate_key has no item type). Output schemas are not documented. Error handling is classified internally (ApiManagerErrorKind enum) but tool-level recovery guidance is absent. Security is a major concern: unlock() accepts a password parameter (default hardcoded), and the tool manages plaintext .env files without encryption, this is acknowledged in the docstring ('Not a vault') but represents a fundamental design risk for an agent tool.
Add a new key-value pair to a .env file. Atomic write with automatic backup before modification.
Delete a key from a .env file. Atomic write with automatic backup before modification.
Auto-detect what service an API key belongs to based on key prefix or environment variable name hints. Returns service name and color badge.
Build .env.master — a consolidated namespaced inventory of every key from every .env file, gitignored, chmod 600.
Retrieve audit log entries from local SQLite database. Every read, write, validate, rotate, and unlock event is logged.
Load a specific .env file and return its parsed key-value pairs with service detection and metadata.
6 of 12 tools lack visible input schemas in source code (scan_env_files, validate_key, search_keys, generate_master_file, get_audit_log, and partially rotate_key). Cannot verify parameter types, constraints, or required fields.
No output schemas documented for any tool. LLMs cannot infer what fields to expect from responses (e.g., does scan_env_files return {paths: [string]} or {files: [{path, size, modified}]}?). Breaks tool chaining and forces LLMs to guess field names.
Security risk: unlock() accepts password as a parameter. Agents log all parameters, this exposes the unlock password in traces and prompt history. Should use server-side secret injection or remove the parameter entirely, gating visibility via HTTP session state.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Rotate an API key by updating its value across all .env files where it appears. Logs the rotation event to audit database.
Scan every .env file on your machine. Returns list of discovered .env files with their paths and basic metadata.
Cross-file global search for a key name. Returns every place it lives across all .env files with drift detection.
Unlock the soft reveal password to see unmasked key values. Password gates visibility of existing values, not writes. Auto-locks after 5 minutes of inactivity.
Update an existing key's value in a .env file. Atomic write with automatic backup before modification.
Validate an API key by calling the actual service API to check if the key still works. Supports Anthropic, OpenAI, Stripe, Resend, Firecrawl, GitHub, OpenRouter, Replicate, HuggingFace, Cloudflare, Vercel, Sentry, Linear, Notion, Slack.
No error recovery guidance in tool descriptions. When validate_key fails (e.g., 'Invalid API key'), the description does not tell the LLM what to do next (e.g., 'Try rotate_key to update the value'). Agents hit dead ends without actionable error messages.
rotate_key 'files' parameter is an array with no item type constraint. Description says 'optional, defaults to all files containing the key' but does not specify format (absolute paths? relative? glob patterns?). LLMs will guess and pass invalid values.