{"definition_raw":"---\nid: memory-extractor-iris\ntitle: Session memory extractor (Iris persona) \u2014 Hermes state.db bridge\nschedule: \"0 */4 * * *\"\ntimeout: 1800\nretry: false\nbackground: true # MC-4942 U8: backgrounded \u2014 long-running, was stalling the tick\nenabled: true\nnotify_on: failure\nrun_as: shell\ncommand: \"flock -n /tmp/iris-memory-extractor.lock bash -c 'cd /home/lucienne/workspace/PKA && git pull --ff-only --quiet 2>/dev/null || true; PKA_EXTRACTION_PROVIDER=agy IRIS_WINDOW_HOURS=8 IRIS_MAX_PER_RUN=10 PKA_EXTRACTOR_MAX_CALLS=40 python3 scripts/iris_memory_capture.py' || echo 'memory-extractor-iris: locked, skipping'\"\ntags: [infrastructure, memory, extractor, iris]\nruntime_profile: direct_mixed\n---\n\n**Going-forward Iris-persona session-memory extraction.** Iris is a separate\nHermes profile (`~/.hermes/profiles/iris/`) whose conversations live in her own\n`state.db`, NOT `session_*.json` (write_json_snapshots off). The shared extractor's\nHermes adapter only reads `session_*.json`, so `scripts/iris_memory_capture.py` is\nthe bridge: it exports Iris's RECENT non-cron sessions (telegram + cli) from\nstate.db to a temp dir of `session_*.json`, then runs\n`hooks/session-memory-extractor.py` scoped to `PKA_PERSONA=iris` over that dir,\npublishing durable memories to `Vault/memory/auto/iris/`.\n\n**Why the bridge, not write_json_snapshots:** enabling snapshots on Iris's profile\nwould need a gateway restart (disrupts active Iris use) and create JSON files\nneeding pruning. The export bridge reads state.db read-only, writes temp JSON it\ndeletes, and re-uses the extractor's `.processed-ledger.json` (in `auto/iris/`) to\ndedup already-seen sessions \u2014 so each run only triggers LLM calls for genuinely new\nconversations.\n\n**Schedule offset:** `0 */4` (Luci-persona extractor is `30 */4`). They share ONE\nglobal lock (`PKA_ROOT/.session-extractor.lock`), so the 30-min offset prevents\ncollision; each run is bounded (`--max-per-run 10`, `PKA_EXTRACTOR_MAX_CALLS=40`)\nand finishes well inside the gap. Separate `flock /tmp/iris-memory-extractor.lock`\nguards the task layer.\n\n**Window:** `IRIS_WINDOW_HOURS=8` (overlaps the 4h cadence so nothing is missed at\nboundaries). The one-off full backlog is run with `IRIS_BACKLOG_ALL=1` (recovered\n2026-06-08). `PKA_EXTRACTION_PROVIDER=agy` routes extraction through Google\nAntigravity / Gemini quota, not Claude subscription quota; `runtime_profile:\ndirect_mixed` keeps scheduler provider accounting truthful. Independent of Mission\nControl.\n","id":"memory-extractor-iris","last_run":{"duration_s":14.508394,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/413492.log","output":"iris capture: exported 2 session(s) (window=8.0h)\n","started_at":"2026-06-13T04:04:35.544201+02:00","status":"completed"},"next_run":"2026-06-13 08:00","next_run_iso":"2026-06-13T08:00:00+02:00","runs":[{"duration_s":14.508394,"finished_at":"2026-06-13T04:04:50.053587+02:00","id":413492,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/413492.log","output":"iris capture: exported 2 session(s) (window=8.0h)\n","started_at":"2026-06-13T04:04:35.544201+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":194.278777,"finished_at":"2026-06-13T00:04:00.476072+02:00","id":412783,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/412783.log","output":"iris capture: exported 7 session(s) (window=8.0h)\n","started_at":"2026-06-13T00:00:46.196814+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":212.323036,"finished_at":"2026-06-12T20:04:00.460651+02:00","id":412086,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/412086.log","output":"iris capture: exported 12 session(s) (window=8.0h)\n","started_at":"2026-06-12T20:00:28.137368+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":213.258689,"finished_at":"2026-06-12T16:04:00.436057+02:00","id":411396,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/411396.log","output":"iris capture: exported 12 session(s) (window=8.0h)\n","started_at":"2026-06-12T16:00:27.177119+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":12.660542,"finished_at":"2026-06-12T12:09:25.923284+02:00","id":410717,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/410717.log","output":"iris capture: exported 9 session(s) (window=8.0h)\n","started_at":"2026-06-12T12:09:13.262298+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":226.5081,"finished_at":"2026-06-12T08:07:00.433147+02:00","id":410022,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/410022.log","output":"iris capture: exported 9 session(s) (window=8.0h)\n","started_at":"2026-06-12T08:03:13.924788+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":12.723468,"finished_at":"2026-06-12T04:04:38.439003+02:00","id":409326,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/409326.log","output":"iris capture: exported 8 session(s) (window=8.0h)\n","started_at":"2026-06-12T04:04:25.714566+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":13.331789,"finished_at":"2026-06-12T00:01:00.449039+02:00","id":408620,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/408620.log","output":"iris capture: exported 7 session(s) (window=8.0h)\n","started_at":"2026-06-12T00:00:47.116399+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":36.461247,"finished_at":"2026-06-11T20:01:00.506894+02:00","id":407881,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/407881.log","output":"iris capture: exported 4 session(s) (window=8.0h)\n","started_at":"2026-06-11T20:00:24.044807+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":211.282834,"finished_at":"2026-06-11T16:04:00.266936+02:00","id":407141,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/407141.log","output":"iris capture: exported 20 session(s) (window=8.0h)\n","started_at":"2026-06-11T16:00:28.982939+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":null,"finished_at":"2026-06-11T12:35:01.150305+02:00","id":406506,"log_path":null,"output":"Stale lock killed after 1889s","started_at":"2026-06-11 10:35:01","status":"timeout","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":207.809121,"finished_at":"2026-06-11T12:07:00.298697+02:00","id":406395,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/406395.log","output":"iris capture: exported 36 session(s) (window=8.0h)\n","started_at":"2026-06-11T12:03:32.488014+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":205.228652,"finished_at":"2026-06-11T08:07:15.093020+02:00","id":405671,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/405671.log","output":"iris capture: exported 32 session(s) (window=8.0h)\n","started_at":"2026-06-11T08:03:49.861179+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":205.380329,"finished_at":"2026-06-11T04:10:50.169348+02:00","id":404972,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/404972.log","output":"iris capture: exported 32 session(s) (window=8.0h)\n","started_at":"2026-06-11T04:07:24.786251+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":210.185061,"finished_at":"2026-06-11T00:10:36.210238+02:00","id":404263,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/404263.log","output":"iris capture: exported 32 session(s) (window=8.0h)\n","started_at":"2026-06-11T00:07:06.022647+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":223.658273,"finished_at":"2026-06-10T20:06:31.712880+02:00","id":403532,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/403532.log","output":"iris capture: exported 26 session(s) (window=8.0h)\n","started_at":"2026-06-10T20:02:48.050176+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":197.164712,"finished_at":"2026-06-10T16:07:59.589784+02:00","id":402822,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/402822.log","output":"iris capture: exported 10 session(s) (window=8.0h)\n","started_at":"2026-06-10T16:04:42.420901+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":142.473005,"finished_at":"2026-06-10T12:11:03.724509+02:00","id":402126,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/402126.log","output":"iris capture: exported 6 session(s) (window=8.0h)\n","started_at":"2026-06-10T12:08:41.247946+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":16.206653,"finished_at":"2026-06-10T08:02:05.431691+02:00","id":401402,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/401402.log","output":"iris capture: exported 4 session(s) (window=8.0h)\n","started_at":"2026-06-10T08:01:49.221352+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"},{"duration_s":3.412897,"finished_at":"2026-06-10T04:03:33.838386+02:00","id":400695,"log_path":"/home/lucienne/workspace/logs/task-runs/memory-extractor-iris/400695.log","output":"iris capture: exported 2 session(s) (window=8.0h)\n","started_at":"2026-06-10T04:03:30.423025+02:00","status":"completed","task_id":"memory-extractor-iris","task_name":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"}],"runs_limit":20,"schedule":"0 */4 * * *","schedule_label":{"description":"Every 4 hours at :00","is_custom":false,"label":"Every 4h","sort":3,"sort_time":""},"stats":{"avg_duration":98.46630251724139,"completed":29,"failed":0,"timeout":1,"total":30},"task":{"_description":"**Going-forward Iris-persona session-memory extraction.** Iris is a separate\nHermes profile (`~/.hermes/profiles/iris/`) whose conversations live in her own\n`state.db`, NOT `session_*.json` (write_json_snapshots off). The shared extractor's\nHermes adapter only reads `session_*.json`, so `scripts/iris_memory_capture.py` is\nthe bridge: it exports Iris's RECENT non-cron sessions (telegram + cli) from\nstate.db to a temp dir of `session_*.json`, then runs\n`hooks/session-memory-extractor.py` scoped to `PKA_PERSONA=iris` over that dir,\npublishing durable memories to `Vault/memory/auto/iris/`.\n\n**Why the bridge, not write_json_snapshots:** enabling snapshots on Iris's profile\nwould need a gateway restart (disrupts active Iris use) and create JSON files\nneeding pruning. The export bridge reads state.db read-only, writes temp JSON it\ndeletes, and re-uses the extractor's `.processed-ledger.json` (in `auto/iris/`) to\ndedup already-seen sessions \u2014 so each run only triggers LLM calls for genuinely new\nconversations.\n\n**Schedule offset:** `0 */4` (Luci-persona extractor is `30 */4`). They share ONE\nglobal lock (`PKA_ROOT/.session-extractor.lock`), so the 30-min offset prevents\ncollision; each run is bounded (`--max-per-run 10`, `PKA_EXTRACTOR_MAX_CALLS=40`)\nand finishes well inside the gap. Separate `flock /tmp/iris-memory-extractor.lock`\nguards the task layer.\n\n**Window:** `IRIS_WINDOW_HOURS=8` (overlaps the 4h cadence so nothing is missed at\nboundaries). The one-off full backlog is run with `IRIS_BACKLOG_ALL=1` (recovered\n2026-06-08). `PKA_EXTRACTION_PROVIDER=agy` routes extraction through Google\nAntigravity / Gemini quota, not Claude subscription quota; `runtime_profile:\ndirect_mixed` keeps scheduler provider accounting truthful. Independent of Mission\nControl.","_file":"memory-extractor-iris.md","_path":"/home/lucienne/workspace/tasks/memory-extractor-iris.md","background":true,"command":"flock -n /tmp/iris-memory-extractor.lock bash -c 'cd /home/lucienne/workspace/PKA && git pull --ff-only --quiet 2>/dev/null || true; PKA_EXTRACTION_PROVIDER=agy IRIS_WINDOW_HOURS=8 IRIS_MAX_PER_RUN=10 PKA_EXTRACTOR_MAX_CALLS=40 python3 scripts/iris_memory_capture.py' || echo 'memory-extractor-iris: locked, skipping'","enabled":true,"id":"memory-extractor-iris","notify_on":"failure","retry":false,"run_as":"shell","runtime_profile":"direct_mixed","schedule":"0 */4 * * *","tags":["infrastructure","memory","extractor","iris"],"timeout":1800,"title":"Session memory extractor (Iris persona) \u2014 Hermes state.db bridge"}}
