v0.5.0
NBER CLI v0.5.0 Release Notes
What's New
Security Hardening
- RSS parsing is now protected against XXE attacks. The feed parser uses
defusedxmlinstead of the standard library XML parser, blocking external entities and entity expansion. - Downloads stay inside your working directory by default. Run
nber-cli download --restrict falseto opt out per invocation. Thedownload.restrict_dirconfig key is stored and validated, but the current CLI default remainstrue. - Database paths are constrained to your home directory on Unix.
db initanddb migratereject paths outside$HOMEon macOS and Linux. - TLS 1.2 is now the minimum version for synchronous HTTP requests.
- Selected info/download failure paths expose less raw exception detail. Download log messages and soft database warnings use sanitized summaries or exception class names.
Configuration Management
- New
nber-cli configsubcommand:show,get <key>,set <key> <value>, andverifymake it easy to inspect and edit~/.nber-cli/config.jsonwithout touching the file directly. - JSON Schema validation is shipped in the package as
config.schema.json;config verifyvalidates your file against it. - Strict raw-config validation reports malformed JSON, invalid section/value types, and values below schema minima without hiding them behind injected defaults.
- New public Python API exports for config management:
read_config,write_config,get_config_value,set_config_value, andvalidate_config.
Download and Feed Improvements
- Concurrent downloads are capped. The new
download.concurrencysetting defaults to3; use--concurrency/-cto override on the fly. - Invalid concurrency values fail safely. Per-call invalid values are rejected, while invalid persisted values fall back to the documented default.
- Malformed RSS items are skipped instead of aborting the whole feed fetch.
- Feed persistence is ordered and transactional. The database schema is established before the network request, and feed items plus fetch history are committed together.
- Cache cleanup is transactional with schema validation. Feed and info cache cleanup pair schema validation/upgrade and deletion in one SQLite transaction.
- More tolerant RSS parsing handles unescaped
<characters in titles and abstracts, plus theⓡauthor separator used in some NBER feed titles. - Better retries use exponential backoff with a 30-second ceiling.
Validation and Database Compatibility
- Fetched metadata is validated for a non-empty title, positive citation ID, and agreement between requested and returned paper IDs.
- Future database schemas are protected. Schema-changing and writing operations reject a database newer than the installed package without downgrading it.
MCP Server
- SSE transport.
nber-cli mcp-server --transport ssestarts the new SSE transport. - Custom ports require confirmation.
nber-cli mcp-server --transport streamable-http --port 8080 --yesstarts the HTTP transport on the requested port; omitting--yeson a non-default port exits with a clear error.
Agent Plugins
- Plugin metadata is synchronized. Claude and Codex plugin manifests plus the Claude marketplace metadata share the package version.
- Claude skill path is case-correct. The plugin points to the tracked
./skills/NBER-CLIdirectory, which matters on case-sensitive filesystems.
Installation
uv tool install nber-cli==0.5.0
# or
pip install nber-cli==0.5.0
# or
uvx nber-cli==0.5.0Full Changelog: v0.4.0...v0.5.0
Download: v0.5.0 Release