New Features
- Consumer hot-reload — every poll cycle (5s default) the consumer re-runs
bootstrap() when idle, so agento mo:en/mo:di, config:set, and edits under app/code/ apply live without a container restart. Edits to core module Python code (src/agento/modules/) still require a process restart due to sys.modules caching.
module_reload_before / consumer_reload_after events — new lifecycle events fired on per-tick re-bootstrap, keeping reload separate from shutdown so observers that perform real shutdown work (closing DB connections, flushing telemetry) aren't triggered every 5 seconds. consumer_reload_after carries module_count and elapsed_ms for /health-style observers.
Bug Fixes
- Slash-keyed obscure config fields encrypted at rest — fields like
agent_view/identity/ssh_private_key marked "type": "obscure" in system.json were previously stored plaintext in core_config_data and displayed unmasked by config:get/config:list. A single _parse_config_path() now backs all dispatch sites, masking reads even on legacy plaintext rows; a new EncryptObscureRowsAtRest data patch re-encrypts existing rows on setup:upgrade.
mo:en / mo:di for bundled core modules — module source resolution failed for every core module (core, app_monitor, jira, etc.) because they ship inside <site-packages>/agento/modules/<name>/ rather than as top-level site-packages packages. Resolver now checks that path before falling through to the PyPI top-level check.
- MCP servers loaded in token-based Claude cron sessions — since
claude-code 2.1.69 the workspace-trust dialog no longer auto-enables .mcp.json servers, so non-interactive claude -p runs silently saw mcp_servers: [] and made zero mcp__toolbox__* calls. TokenClaudeRunner now passes --mcp-config .mcp.json (resolved against the per-job artifacts dir) and --strict-mcp-config to lock the source.
Docs
- Documented the new reload events and the user-module top-level side-effect caveat (top-level code in
app/code/<vendor>/<name>/src/*.py re-executes every reload because spec_from_file_location + exec_module re-runs the module each tick).
- Noted inline that
TokenClaudeRunner's --mcp-config .mcp.json path is resolved against the subprocess cwd, flagging the assumption for future callers.
- Reordered the
ModuleSource Literal members to match the actual resolution priority (local → core → pypi → missing).
Upgrade
agento upgrade --version 0.9.6