Kickoff report schema
Overview
Kickoff reports are generated automatically when an agent finishes its task. You typically consume them via crosslink kickoff report rather than reading the JSON directly. This reference documents the schema for tooling integration and custom dashboards.
When a kickoff agent completes its work, it writes a .kickoff-report.json file to the worktree root. This file captures criteria verdicts, phase timing, metrics, and traceability data.
Schema (v1)
{
"schema_version": 1,
"agent_id": "driver--feature-slug",
"issue_id": 42,
"status": "completed",
"started_at": "2026-03-03T12:00:00Z",
"completed_at": "2026-03-03T13:30:00Z",
"validated_at": "2026-03-03T13:25:00Z",
"phases": {
"exploration": { "duration_s": 120, "files_read": 34 },
"planning": { "duration_s": 60, "comments_added": 2 },
"implementation": { "duration_s": 480, "files_modified": 8, "lines_added": 340, "lines_removed": 45 },
"testing": { "duration_s": 90, "tests_run": 146, "tests_passed": 146, "tests_failed": 0 },
"validation": { "duration_s": 30, "criteria_checked": 5 },
"review": { "duration_s": 45, "issues_found": 1, "issues_fixed": 1 }
},
"criteria": [
{ "id": "AC-1", "verdict": "pass", "evidence": "test_upload passes with 100MB file" },
{ "id": "AC-2", "verdict": "partial", "evidence": "HTTP only, not WebSocket" }
],
"summary": {
"total": 2, "pass": 1, "fail": 0, "partial": 1,
"not_applicable": 0, "needs_clarification": 0
},
"unresolved_questions": ["Should we cap the maximum backoff at 30 seconds?"],
"commits": ["abc1234", "def5678"],
"files_changed": ["src/retry.rs", "src/batch.rs"]
}
Field reference
Required fields
| Field | Type | Description |
|---|---|---|
validated_at |
string (ISO-8601) | Timestamp when validation completed |
criteria |
array | Per-criterion verdicts (see below) |
summary |
object | Verdict count totals |
Optional fields (Phase 4)
| Field | Type | Description |
|---|---|---|
schema_version |
integer | Schema version (currently 1) |
agent_id |
string | Agent identifier, e.g. driver--batch-retry |
issue_id |
integer | Crosslink issue number |
status |
string | completed, failed, or partial |
started_at |
string (ISO-8601) | When the agent started work |
completed_at |
string (ISO-8601) | When the agent finished |
phases |
object | Phase-level timing breakdown |
unresolved_questions |
array of strings | Open questions from the design doc |
commits |
array of strings | Commit SHAs produced |
files_changed |
array of strings | Files modified during implementation |
Criterion verdict
| Field | Type | Values |
|---|---|---|
id |
string | e.g. AC-1 |
verdict |
string | pass, fail, partial, not_applicable, needs_clarification |
evidence |
string | Justification for the verdict |
Phase timing
Each phase object has a required duration_s (seconds) and optional metric fields relevant to that phase:
| Phase | Typical Metrics |
|---|---|
exploration |
files_read |
planning |
comments_added |
implementation |
files_modified, lines_added, lines_removed |
testing |
tests_run, tests_passed, tests_failed |
validation |
criteria_checked |
review |
issues_found, issues_fixed |
Backward compatibility
Reports from Phase 3 (containing only validated_at, criteria, and summary) are fully supported. All Phase 4 fields default to null when absent.
Viewing reports
crosslink kickoff report <agent-id> # table view
crosslink kickoff report <agent-id> --json # raw JSON
crosslink kickoff report <agent-id> --markdown # PR-ready format
crosslink kickoff report --all # aggregate all agents