Files

2.9 KiB

Cron Agent Analysis Constraints

Context

The daily-spend-monitor cron job delivers spend data to the agent via "Script Output" (pre-run script output). The agent then analyzes it. But the agent runs under approvals.cron_mode: deny, which heavily restricts what it can do.

Blocked in Cron Mode

Capability Why Blocked
execute_code Blocked by cron_mode deny — runs arbitrary Python that could subvert shell-string checks
terminal(pipe=true) Tirith blocks curl-to-interpreter patterns (e.g., `curl ...
terminal(background=true) notify_on_complete blocked by cron_mode; background without notify is useless
web_extract on authenticated endpoints Can't send Bearer token — endpoints return 401
curl -H "Authorization: Bearer ..." May trigger tirith schemeless-url-to-sink rules
OpenRouter API calls The stored key returns "User not found" 401

What Works in Cron Mode

Tool Notes
web_extract on public URLs Works — no auth needed
terminal simple commands Works if they don't trigger tirith patterns (no pipes, no auth headers, no schemeless URLs)
read_file, search_files Full access
write_file, patch Full access
memory, skill_manage, todo Full access
session_search Works — able to recall past session context

Pattern: Analyze Pre-Run Script Output Only

The spend pre-run script (spend-monitor-collect.sh) uses SSH+PSQL on the admin-ai server, which is the ONLY reliable production path for 24h spend data. The script outputs structured sections:

=== LLM Spend Report — Jul 13 2026 07:00 ===
--- LiteLLM Key Spend (cumulative) ---
 key_prefix...suffix | 232.83
--- Last 24h Total Spend ---
   153.81
--- DeepSeek Models Last 24h ---
 deepseek/deepseek-v4-flash | 0.9886
--- All Models Last 24h (top 10) ---
 gpt-5.5                    | 122.6489

The agent should parse this data directly and produce the report without attempting supplementary API calls. The data is already complete enough for the standard report format:

  1. Total spend 24h ✓
  2. Models > $5/day ✓ (from "All Models Last 24h")
  3. OpenRouter balance — state as "Unavailable" ✓ (no need to query)
  4. Keys > $50 cumulative ✓ (from "LiteLLM Key Spend")

Decision Tree for Daily Spend Cron

Script Output received?
├── YES → Parse and report from data already collected.
│         Do NOT attempt supplementary API calls.
│         If OpenRouter key is mentioned, state "Unavailable" and move on.
│
└── NO (empty Script Output) →
    ├── If admin-ai SSH is down: the script's HTTPS fallback also fails
    │   because curl-auth is blocked by tirith. Report "Data collection
    │   failed — both SSH and HTTPS paths blocked by cron security policy."
    └── Report available partial data or state failure clearly.