# Memory Update: changelog-agent run 2026-02-28 ## Learnings * The default branch is `beta`. `git log` should target `beta` instead of `main` when reading history for this repository. * A `CHANGELOG.md` file exists and we append changes. Since no existing release notes dir was found, I created `releases/draft-YYYYMMDD.md`. * We use `poetry run black .` for formatting tests properly, but I reverted the changes to `torch/scripts` formatting since they were not meant to be changed by this agent. ## Key findings - The `scheduler-flow.md` script execution failed due to a missing runner (`codex`). - The automated `bug-reproducer-agent` prompt execution failed. - Fallback manual investigation identified one active issue: `BIP85 Non-Standard Derivation Path` (using `app_no=2` instead of standard). This is documented in `KNOWN_ISSUES.md`. ## Patterns / reusable knowledge - Future runs should verify the runner environment variables (`SCHEDULER_PROMPT_PATH`, `SCHEDULER_AGENT`, `SCHEDULER_CADENCE`) are set correctly before invoking `run-selected-prompt.mjs`. - If the runner fails, manual fallback or alternative automation (e.g., Python script) is required. ## Warnings / gotchas - `torch/scripts/agent/run-selected-prompt.mjs` depends on an external runner (`codex` or similar) which may not be available in all environments. # Memory Update — agent-security-foundation — 2026-03-01 ## Key findings - `src/seedpass/cli/agent.py` previously used a flat policy (`allow_kinds` / `deny_private_reveal`) with no rule-level operation, regex, or field matching. - Introducing a versioned rule model can remain backward-compatible by auto-normalizing legacy policy files into structured `rules`. - Empty `kinds` in deny rules must not be generated unintentionally for legacy migration, otherwise deny rules become wildcard blocks. ## Patterns / reusable knowledge - For agent automation hardening, implement in this order for minimal breakage: policy normalization, enforcement hooks, safe-output redaction, token scoping/TTL/use limits, then append-only audit logging. - Keep compatibility fields (`allow_kinds`, `deny_private_reveal`, `allow_export_import`) in the normalized policy output so older tooling still functions. - Tests in `src/tests/test_cli_agent_mode.py` are the right place to cover agent policy regressions and token lease semantics. ## Warnings / gotchas - CI environment may not have global `pytest`; use `./.venv/bin/pytest` in this repo. - Agent command tests that monkeypatch `_load_policy` with legacy payloads require in-command normalization to avoid false policy denials. # Memory Update — auth-broker-phase1 — 2026-03-01 ## Key findings - A dedicated broker abstraction in `seedpass/core/auth_broker.py` allows non-interactive secret retrieval without coupling broker logic into CLI command modules. - Legacy env-var auth can remain default while enabling keyring/command brokers via explicit CLI options. - For per-profile non-interactive unlock, defaulting keyring account to fingerprint in `agent get` avoids account collisions across profiles. ## Patterns / reusable knowledge - Introduce broker modes in this order: `env` (compat), `keyring` (native OS storage), `command` (bridge to HSM/YubiKey helper tooling). - Keep broker-specific failures converted to `typer.BadParameter` so automation receives consistent deterministic exit behavior. - Agent-mode tests are the fastest place to validate broker migration without touching broader interactive flows. ## Warnings / gotchas - `keyring` package is optional in current dependency set; keyring broker must fail with a clear install/error message when unavailable. - Command broker output must be strictly stdout-only password text; any wrapper script should avoid additional logs on stdout. # Memory Update — auth-broker-phase2 — 2026-03-01 ## Key findings - Extending broker-based auth to `vault unlock` and `api start` can be done without breaking interactive defaults by using `prompt` as the default broker. - `api.start_server` can support non-interactive startup unlock by accepting an optional `unlock_password` parameter while preserving existing callers. ## Patterns / reusable knowledge - For backward compatibility in CLI tests, keep existing command behavior unchanged unless explicit broker flags are provided. - Use consistent broker options across commands: `--auth-broker`, `--password-env`, `--broker-service`, `--broker-account`, `--broker-command`. ## Warnings / gotchas - When introducing additional args to helper functions used in tests (`start_server`), keep positional compatibility so existing monkeypatched fakes still work. # Memory Update — capabilities-command-v1 — 2026-03-01 ## Key findings - Agents benefit from a single deterministic capability map command instead of scraping many `--help` screens. - A stable JSON schema for capabilities is useful for automation and CI checks; text output can remain user-friendly. ## Patterns / reusable knowledge - Implement capability output with fixed ordering and versioned schema (`schema_version`) to reduce churn in downstream parsers. - Expose both CLI and API discovery hints in one surface so agents can bootstrap without external docs. ## Warnings / gotchas - Capability maps can drift from actual commands if manually maintained; future work should generate metadata from command registries. # Memory Update — bootstrap-context-v1 — 2026-03-01 ## Key findings - A dedicated `agent bootstrap-context` command significantly reduces setup overhead for autonomous agents by returning policy/token/auth posture in one deterministic JSON document. - Treating invalid policy as non-fatal context (`policy.status=invalid`) is useful for diagnostics and recovery workflows. ## Patterns / reusable knowledge - Bootstrap context should avoid all sensitive data and include only posture metadata and actionable command hints. - `sort_keys=True` for JSON output improves reproducibility for automated parsers and snapshot tests. ## Warnings / gotchas - Token posture summaries should classify revoked/expired/exhausted separately to avoid misleading “active” counts. # Memory Update — posture-check-v1 — 2026-03-01 ## Key findings - A lightweight `agent posture-check` command can provide immediate security signal with deterministic output and CI-friendly exit behavior. - Severity thresholding (`--fail-on`) is useful for phased rollout: start with `critical`, then tighten to `high`/`medium` as posture matures. ## Patterns / reusable knowledge - Keep posture findings stable with explicit IDs and severities so automation can suppress or track specific controls over time. - Treat invalid policy as a critical posture issue but still return full JSON payload for diagnostics. ## Warnings / gotchas - Posture checks that read token store should classify revoked/expired/exhausted tokens separately to avoid false positives on active credentials. # Memory Update — export-policy-gating-v1 — 2026-03-01 ## Key findings - Agent-profile export controls are easiest to roll out by introducing explicit context flags (`--agent-profile` / `X-SeedPass-Agent-Profile`) instead of changing default export behavior for all users. - Full-vault export and subset export need separate controls; subset export can be deterministic by filtering encrypted index data by policy-allowed kinds before encryption. ## Patterns / reusable knowledge - Centralize export control logic in a shared module (`seedpass/core/agent_export_policy.py`) so CLI and API enforcement remain consistent. - For deterministic subset export payloads, use `json.dumps(..., sort_keys=True, separators=(",",":"))` before encryption. ## Warnings / gotchas - Default policy currently allows `totp` in `allow_kinds`; denial tests must provide an explicit restrictive policy fixture when validating blocked TOTP export.