Repository navigation
Known Issues
Gotchas worth knowing before you hit them. Each entry is a fixed, non-obvious issue — a reproduction condition, an environmental dependency, or a surprising interaction between features — not a running bug tracker. See CI gates for the deterministic check suite and Completed features for the full shipped-work log.
| Symptom | Cause | Fixed in |
|---|---|---|
| A launchd/cron-triggered background job silently discovers zero jobs (exit 0, nothing runs, no error anywhere) |
agentm-runner.sh cds into scripts/ for a sibling import; runner.cli's --jobs-dir/--harness-dir default to CWD-relative paths that only resolve from the repo root |
#320 (2026-07-17) |
scripts/agentm-runner.sh (the launchd-invoked entry point for the runner) has to cd into scripts/ so runner.cli's sibling import of vault_lock.py resolves. But runner.cli's own --jobs-dir/--harness-dir flags default to CWD-relative paths (.harness/jobs, .harness) that only resolve correctly from the repo root. Under cwd=scripts/ they silently resolved to a directory that never existed — and manifest.load_manifests() treats a missing jobs directory as "fresh install, no jobs configured" (returns []), not an error. Every launchd-triggered cycle since the runner was first built (2026-07-05) ran clean and exited 0 having discovered zero jobs; nothing ever surfaced in a log or an alert.
A second, related bug rode the same blind spot: the launchd plist sets no MEMORY_VAULT_PATH, so a job command referencing $MEMORY_VAULT_PATH expanded to an empty string — Path("").is_dir() is True (resolves to cwd), so inbox_digest.py's own directory check passed, and a job could write real output into the repo checkout instead of the vault, again with no error.
Fix. agentm-runner.sh now passes both paths explicitly, anchored at the repo root regardless of cwd, and resolves/exports MEMORY_VAULT_PATH via harness_memory.vault_path() when the launcher hasn't already set it. inbox_digest.py now rejects an empty/falsy vault path before ever touching Path().
The durable lesson. A launcher script that cds for a sibling-import reason silently invalidates any CWD-relative default in the program it then invokes — and if the invoked program treats a missing directory as "nothing configured" rather than an error, the failure has zero signal (exit 0, clean logs). Check this on any new launcher script, or if agentm-runner.sh grows another cd. See the runner design's amendment log for the full incident.
🔧 How-to
- Installer CLI
- Supported configurations
- Detection rules
- Project config
- GitHub Projects sync
- CI gates
- Retrieval eval contract
- PII Guardrail
- Repo layout
- Vault lint checks
- Note relatedness signals
- Vault write protocol
- Queue status lite
- AgentMemory context payload
- Process seam
- Orchestration bridge
- Storage seam
- Auto-orchestration config
- Capability resolver
- Design governance
- Persona tier schema
- Compatibility
- Completed features
- Known issues
- Memory daemon (agentmd)
- Vault project.yaml
- Memory MCP tools
- Kind-taxonomy registry
- MOC generator