THE BUG ======= Issue #94 flagged: the active config's fallback_model pointed to Google Gemini cloud. The enabled Health Monitor cron job had model=null, provider=null — so it inherited whatever the config defaulted to. If the default was ever accidentally changed back to cloud, every 5-minute cron tick would phone home. THE FIX ======= config.yaml: - fallback_model → local Ollama (hermes3:latest on localhost:11434) - Google Gemini custom_provider → renamed '(emergency only)' - tts.openai.model → disabled (use edge TTS locally) cron/jobs.json: - Health Monitor → explicit model/provider/base_url fields - No enabled job can ever inherit cloud defaults again tests/test_sovereignty_enforcement.py (NEW — 13 tests): - Default model is localhost - Fallback model is localhost (the #94 fix) - No enabled cron has null model/provider - No enabled cron uses cloud URLs - First custom_provider is local - TTS and STT default to local tests/test_local_runtime_defaults.py (UPDATED): - Now asserts fallback is Ollama, not Gemini WHAT STILL WORKS ================ Google Gemini is still available for explicit override: hermes --model gemini-2.5-pro It's just not automatic anymore. You have to ask for it. FULL SUITE ========== 36/36 pass. Zero regressions. Closes #94 Signed-off-by: gemini <gemini@hermes.local>
139 lines
4.2 KiB
JSON
139 lines
4.2 KiB
JSON
{
|
|
"jobs": [
|
|
{
|
|
"id": "9e0624269ba7",
|
|
"name": "Triage Heartbeat",
|
|
"prompt": "Scan all Timmy_Foundation/* repos for unassigned issues, auto-assign to appropriate agents based on labels/complexity",
|
|
"schedule": {
|
|
"kind": "interval",
|
|
"minutes": 15,
|
|
"display": "every 15m"
|
|
},
|
|
"schedule_display": "every 15m",
|
|
"repeat": {
|
|
"times": null,
|
|
"completed": 6
|
|
},
|
|
"enabled": false,
|
|
"created_at": "2026-03-24T11:28:46.408551-04:00",
|
|
"next_run_at": "2026-03-24T15:48:57.749458-04:00",
|
|
"last_run_at": "2026-03-24T15:33:57.749458-04:00",
|
|
"last_status": "ok",
|
|
"last_error": null,
|
|
"deliver": "local",
|
|
"origin": null,
|
|
"state": "paused",
|
|
"paused_at": "2026-03-24T16:23:01.614552-04:00",
|
|
"paused_reason": "Dashboard repo frozen - loops redirected to the-nexus",
|
|
"skills": [],
|
|
"skill": null
|
|
},
|
|
{
|
|
"id": "e29eda4a8548",
|
|
"name": "PR Review Sweep",
|
|
"prompt": "Check all Timmy_Foundation/* repos for open PRs, review diffs, merge passing ones, comment on problems",
|
|
"schedule": {
|
|
"kind": "interval",
|
|
"minutes": 30,
|
|
"display": "every 30m"
|
|
},
|
|
"schedule_display": "every 30m",
|
|
"repeat": {
|
|
"times": null,
|
|
"completed": 2
|
|
},
|
|
"enabled": false,
|
|
"created_at": "2026-03-24T11:28:46.408986-04:00",
|
|
"next_run_at": "2026-03-24T15:51:42.995715-04:00",
|
|
"last_run_at": "2026-03-24T15:21:42.995715-04:00",
|
|
"last_status": "ok",
|
|
"last_error": null,
|
|
"deliver": "local",
|
|
"origin": null,
|
|
"state": "paused",
|
|
"paused_at": "2026-03-24T16:23:02.731437-04:00",
|
|
"paused_reason": "Dashboard repo frozen - loops redirected to the-nexus",
|
|
"skills": [],
|
|
"skill": null
|
|
},
|
|
{
|
|
"id": "a77a87392582",
|
|
"name": "Health Monitor",
|
|
"prompt": "Check Ollama is responding, disk space, memory, GPU utilization, process count",
|
|
"model": "hermes3:latest",
|
|
"provider": "ollama",
|
|
"base_url": "http://localhost:11434/v1",
|
|
"schedule": {
|
|
"kind": "interval",
|
|
"minutes": 5,
|
|
"display": "every 5m"
|
|
},
|
|
"schedule_display": "every 5m",
|
|
"repeat": {
|
|
"times": null,
|
|
"completed": 14
|
|
},
|
|
"enabled": true,
|
|
"created_at": "2026-03-24T11:28:46.409367-04:00",
|
|
"next_run_at": "2026-03-24T15:39:39.045945-04:00",
|
|
"last_run_at": "2026-03-24T15:34:39.045945-04:00",
|
|
"last_status": "ok",
|
|
"last_error": null,
|
|
"deliver": "local",
|
|
"origin": null,
|
|
"state": "scheduled"
|
|
},
|
|
{
|
|
"id": "5e9d952871bc",
|
|
"name": "Agent Status Check",
|
|
"prompt": "Check which tmux panes are idle vs working, report utilization",
|
|
"schedule": {
|
|
"kind": "interval",
|
|
"minutes": 10,
|
|
"display": "every 10m"
|
|
},
|
|
"schedule_display": "every 10m",
|
|
"repeat": {
|
|
"times": null,
|
|
"completed": 8
|
|
},
|
|
"enabled": false,
|
|
"created_at": "2026-03-24T11:28:46.409727-04:00",
|
|
"next_run_at": "2026-03-24T15:45:58.108921-04:00",
|
|
"last_run_at": "2026-03-24T15:35:58.108921-04:00",
|
|
"last_status": "ok",
|
|
"last_error": null,
|
|
"deliver": "local",
|
|
"origin": null,
|
|
"state": "paused",
|
|
"paused_at": "2026-03-24T16:23:03.869047-04:00",
|
|
"paused_reason": "Dashboard repo frozen - loops redirected to the-nexus",
|
|
"skills": [],
|
|
"skill": null
|
|
},
|
|
{
|
|
"id": "36fb2f630a17",
|
|
"name": "Hermes Philosophy Loop",
|
|
"prompt": "Hermes Philosophy Loop: File issues to Timmy_Foundation/hermes-agent",
|
|
"schedule": {
|
|
"kind": "interval",
|
|
"minutes": 1440,
|
|
"display": "every 1440m"
|
|
},
|
|
"schedule_display": "every 1440m",
|
|
"repeat": {
|
|
"times": null,
|
|
"completed": 0
|
|
},
|
|
"enabled": false,
|
|
"created_at": "2026-03-24T11:28:46.410059-04:00",
|
|
"next_run_at": "2026-03-25T11:28:46.410064-04:00",
|
|
"last_run_at": null,
|
|
"last_status": null,
|
|
"last_error": null,
|
|
"deliver": "local",
|
|
"origin": null
|
|
}
|
|
],
|
|
"updated_at": "2026-03-24T16:23:03.869797-04:00"
|
|
} |