{
  "version": "1.0.0",
  "description": "Master manifest of all Timmy automations",
  "last_updated": "2026-03-21",
  "automations": [
    {
      "id": "cycle_retro",
      "name": "Cycle Retrospective",
      "description": "Logs structured retrospective data after each development cycle",
      "script": "scripts/cycle_retro.py",
      "category": "daily_run",
      "enabled": true,
      "trigger": "post_cycle",
      "executable": "python3",
      "config": {
        "retro_file": ".loop/retro/cycles.jsonl",
        "summary_file": ".loop/retro/summary.json",
        "summary_window": 50,
        "epoch_enabled": true
      },
      "outputs": [
        ".loop/retro/cycles.jsonl",
        ".loop/retro/summary.json"
      ]
    },
    {
      "id": "loop_guard",
      "name": "Loop Guard",
      "description": "Idle detection with exponential backoff to prevent burning cycles on empty queues",
      "script": "scripts/loop_guard.py",
      "category": "daily_run",
      "enabled": true,
      "trigger": "pre_cycle",
      "executable": "python3",
      "config": {
        "queue_file": ".loop/queue.json",
        "idle_state_file": ".loop/idle_state.json",
        "backoff_base_seconds": 60,
        "backoff_max_seconds": 600,
        "backoff_multiplier": 2,
        "cycle_duration_seconds": 300
      },
      "outputs": [
        ".loop/idle_state.json"
      ]
    },
    {
      "id": "triage_score",
      "name": "Mechanical Triage Scoring",
      "description": "Pure heuristic scoring of open issues based on scope, acceptance criteria, and alignment",
      "script": "scripts/triage_score.py",
      "category": "daily_run",
      "enabled": true,
      "trigger": "scheduled",
      "schedule": "every_10_cycles",
      "executable": "python3",
      "config": {
        "ready_threshold": 5,
        "quarantine_lookback": 20,
        "queue_file": ".loop/queue.json",
        "retro_file": ".loop/retro/triage.jsonl",
        "quarantine_file": ".loop/quarantine.json"
      },
      "outputs": [
        ".loop/queue.json",
        ".loop/retro/triage.jsonl",
        ".loop/quarantine.json"
      ]
    },
    {
      "id": "deep_triage",
      "name": "Deep Triage",
      "description": "LLM-driven intelligent issue refinement, breaking down large issues, adding acceptance criteria",
      "script": "scripts/deep_triage.sh",
      "category": "triage",
      "enabled": true,
      "trigger": "scheduled",
      "schedule": "every_20_cycles",
      "executable": "bash",
      "depends_on": ["loop_introspect"],
      "config": {
        "queue_file": ".loop/queue.json",
        "retro_file": ".loop/retro/deep-triage.jsonl",
        "prompt_file": "scripts/deep_triage_prompt.md",
        "timmy_consultation": true,
        "timmy_timeout_seconds": 60
      },
      "outputs": [
        ".loop/queue.json",
        ".loop/retro/deep-triage.jsonl"
      ]
    },
    {
      "id": "loop_introspect",
      "name": "Loop Introspection",
      "description": "Self-improvement engine that analyzes retro data and produces structured recommendations",
      "script": "scripts/loop_introspect.py",
      "category": "triage",
      "enabled": true,
      "trigger": "scheduled",
      "schedule": "every_20_cycles",
      "executable": "python3",
      "config": {
        "cycles_file": ".loop/retro/cycles.jsonl",
        "deep_triage_file": ".loop/retro/deep-triage.jsonl",
        "triage_file": ".loop/retro/triage.jsonl",
        "quarantine_file": ".loop/quarantine.json",
        "insights_file": ".loop/retro/insights.json",
        "trend_window_days": 7
      },
      "outputs": [
        ".loop/retro/insights.json"
      ]
    },
    {
      "id": "agent_workspace",
      "name": "Agent Workspace Manager",
      "description": "Creates and maintains isolated git clones, port ranges, and data directories per agent",
      "script": "scripts/agent_workspace.sh",
      "category": "workspace",
      "enabled": true,
      "trigger": "manual",
      "executable": "bash",
      "config": {
        "agents_dir": "/tmp/timmy-agents",
        "canonical_repo": "~/Timmy-Time-dashboard",
        "gitea_remote": "http://localhost:3000/rockachopa/Timmy-time-dashboard.git",
        "agents": ["hermes", "kimi-0", "kimi-1", "kimi-2", "kimi-3", "smoke"],
        "port_base_dashboard": 8100,
        "port_base_serve": 8200
      },
      "outputs": []
    },
    {
      "id": "kimi_bootstrap",
      "name": "Kimi Workspace Bootstrap",
      "description": "One-time setup script for new Kimi agent workspaces",
      "script": ".kimi/scripts/bootstrap.sh",
      "category": "workspace",
      "enabled": true,
      "trigger": "manual",
      "executable": "bash",
      "config": {},
      "outputs": []
    },
    {
      "id": "kimi_resume",
      "name": "Kimi Resume",
      "description": "Quick status check and resume prompt for Kimi workspaces",
      "script": ".kimi/scripts/resume.sh",
      "category": "workspace",
      "enabled": true,
      "trigger": "manual",
      "executable": "bash",
      "config": {},
      "outputs": []
    },
    {
      "id": "backfill_retro",
      "name": "Backfill Retrospective",
      "description": "One-time script to seed retrospective data from Gitea PR history",
      "script": "scripts/backfill_retro.py",
      "category": "metrics",
      "enabled": true,
      "trigger": "manual",
      "executable": "python3",
      "config": {
        "retro_file": ".loop/retro/cycles.jsonl",
        "summary_file": ".loop/retro/summary.json",
        "gitea_api": "http://localhost:3000/api/v1"
      },
      "outputs": [
        ".loop/retro/cycles.jsonl",
        ".loop/retro/summary.json"
      ]
    },
    {
      "id": "pre_commit_checks",
      "name": "Pre-commit Checks",
      "description": "CI hygiene validation before commits — import checks, model config, syntax, formatting",
      "script": "scripts/pre_commit_checks.py",
      "category": "metrics",
      "enabled": true,
      "trigger": "pre_commit",
      "executable": "python3",
      "config": {
        "check_imports": true,
        "check_model_config": true,
        "check_test_syntax": true,
        "check_platform_paths": true,
        "check_docker_tests": true,
        "check_black_formatting": true
      },
      "outputs": []
    },
    {
      "id": "daily_run_orchestrator",
      "name": "Daily Run Orchestrator",
      "description": "The 10-minute ritual — fetches candidate issues and produces a concise Daily Run agenda plus day summary",
      "script": "timmy_automations/daily_run/orchestrator.py",
      "category": "daily_run",
      "enabled": true,
      "trigger": "manual",
      "executable": "python3",
      "config": {
        "config_file": "timmy_automations/config/daily_run.json",
        "candidate_labels": ["daily-run"],
        "size_labels": ["size:XS", "size:S"],
        "max_agenda_items": 3,
        "lookback_hours": 24,
        "agenda_time_minutes": 10
      },
      "outputs": []
    },
    {
      "id": "golden_path",
      "name": "Golden Path Generator",
      "description": "Generates coherent 30-60 minute mini-sessions from real Gitea issues — triage, fixes, and tests",
      "script": "timmy_automations/daily_run/golden_path.py",
      "category": "daily_run",
      "enabled": true,
      "trigger": "manual",
      "executable": "python3",
      "config": {
        "target_minutes": 45,
        "size_labels": ["size:XS", "size:S", "size:M"],
        "min_items": 3,
        "max_items": 5
      },
      "outputs": []
    }
  ]
}
