Goal Timeline
What the Goal Timeline shows
Every goal execution produces a detailed timeline — a chronological log of every tool call the agent made, the arguments it used, the result it got, and how long it took. This is stored in the goal_action_log table and accessible from the Goal Progress panel.
The timeline answers: "What exactly did the agent do to produce this result?"
Accessing the timeline
From the Goal Progress panel:
While a goal is running (or after it completes), click View Timeline at the bottom of the goal panel.
From the chat:
After a goal completes, a "View full execution log" link appears in the completion message.
Via API:
GET /api/autonomous/goal/:id/timeline
Reading the timeline
Goal: "Research NVIDIA Q1 2026 earnings and create a slide deck"
Status: Completed • 8 iterations • 47.2 seconds
──────────────────────────────────────────────────────────
[Iteration 1] 09:15:32 ────────────────────────── 0.8s
Action: web_search
Args: { "query": "NVIDIA Q1 2026 earnings results" }
Result: 8 results returned
Tokens: 412 prompt / 89 completion
[Iteration 2] 09:15:33 ────────────────────────── 1.4s
Action: web_fetch
Args: { "url": "https://investor.nvidia.com/..." }
Result: Revenue: $26.0B (+262% YoY), EPS: $5.98 (beat by $0.12)
Tokens: 1,847 prompt / 156 completion
[Iteration 3] 09:15:35 ────────────────────────── 1.1s
Action: web_search
Args: { "query": "NVIDIA Q1 2026 analyst reactions Wall Street" }
Result: 6 results returned
[Iteration 4] 09:15:36 ────────────────────────── 0.9s
Action: web_fetch
Args: { "url": "https://seekingalpha.com/..." }
Result: Analyst consensus: Buy. Price target raised to $1,100.
[Iteration 5] 09:15:38 ────────────────────────── 3.2s
Action: execute_python
Args: { "script": "# Structure earnings data as JSON\n..." }
Result: { "revenue": 26.0, "eps": 5.98, "yoy_growth": 262, ... }
[Iteration 6] 09:15:42 ────────────────────────── 6.1s
Action: generate_powerpoint
Args: { "title": "NVIDIA Q1 2026 Earnings", "slides": [...] }
Result: File created: nvidia_q1_2026.pptx (8 slides, 2.4 MB)
[Iteration 7] 09:15:48 ─────────────────── ─────── 0.4s
Action: validate_file
Args: { "path": "nvidia_q1_2026.pptx" }
Result: File exists, 8 slides, non-empty ✅
[Iteration 8] 09:15:49 ────────────────────────── 0.3s
Assessment: All success criteria met
→ Goal COMPLETED
──────────────────────────────────────────────────────────
Total: 8 iterations 47.2s 2,847 prompt tokens 512 completion tokens ~$0.03
Self-correction in the timeline
When a script fails and self-corrector fires, it appears as extra iterations:
[Iteration 5] ────────── 2.1s ❌ FAILED
Action: execute_python
Result: AttributeError: 'NoneType' object has no attribute 'text'
[Iteration 5a] ────────── 1.8s (self-correction)
SelfCorrector analyzing error...
Diagnosis: price element selector changed — updated XPath
[Iteration 5b] ────────── 2.4s ✅ RETRY
Action: execute_python (corrected script v2)
Result: Price: ₹2,847.50
Self-corrections are labeled with letter suffixes (5a, 5b, 5c) and include the diagnosis the SelfCorrector produced.
Timeline filtering
The timeline panel has filters:
- Show all — every iteration including successful ones
- Errors only — iterations that failed or triggered self-correction
- File operations — iterations that created, read, or wrote files
- External calls — iterations that called external APIs (web, integrations)
Using the timeline for debugging
If a goal produced an unexpected result, the timeline shows exactly where it went wrong:
- Find the first iteration marked with ❌
- Expand the full result — often the actual error message is there
- Look at the args — did the agent use the right query/URL/parameters?
- Check the self-correction attempt — did it diagnose the error correctly?
Common patterns:
- Web scraping failures: the page structure changed, or the site returned a CAPTCHA — look for "selector not found" in iteration results
- Wrong data: the agent found results for the wrong ticker/company — the search query may need more specificity in your goal
- Timeout at iteration 40: the goal hit the max iteration limit — try breaking it into smaller sub-goals
Comparing timelines across runs
Run the same goal twice and compare timelines to see:
- Whether the skill learned from the first run made the second faster
- Whether a self-correction produced a better script version
- Token usage trends across iterations (useful for cost optimisation)
Each goal has a unique goalId — access historical timelines via:
GET /api/autonomous/goal?status=completed&limit=20
# Then fetch any goal's timeline:
GET /api/autonomous/goal/:id/timeline