Por Kiu Estas Agent Trace?

Cursor publikigis Agent Trace, malferman specifikaĵon por spuri kiun kodon en deponejo estis skribita de LLM. Ĝi registras la modelon, la ilon, la konversacion kaj la ĝustajn liniintervallojn — ĉio aldonita al JSONL-dosiero en via projekto.

La prezento: “Ĉar agentoj skribas pli da kodo, gravas kompreni kio venis de AI kontraŭ homoj.”

Mi pasigis tempon legante la specifikaĵon kaj la referencan efektivigon. La inĝenierado estas solida — pura skemo, pripensita etendeblo, bona partnerlisto (Amp, Amplitude, Cloudflare, Cognition, Google, Vercel). Sed mi daŭre reiris al unu demando: kion vi faras kun ĉi tiuj datumoj?

Kion Ĝi Kaptas

Ĉiufoje kiam LLM redaktas dosieron, hoko ekfunkcias kaj registras spuron: kiu modelo, kiu ilo, kiuj linioj, kiu konversacio. La referenca efektivigo traktas eventojn de kaj Cursor kaj Claude Code:

// El la referenca hoko — eventoj fluas tra stdin
appendTrace(createTrace("ai", input.file_path!, {
  model: input.model,
  rangePositions,
  transcript: input.transcript_path,
  metadata: { conversation_id: input.conversation_id, generation_id: input.generation_id },
}));

La specifikaĵo difinas kvar kontribuanttipojn — human, ai, mixed, unknown — kaj subtenas lininivelaj atribuon kun enhavhaketoj por spuri kodon kiu moviĝas. Ĝi estas vendantneutrala, VCS-agnostika kaj etendebla per nomspacitaj metadatumoj.

Kiel datumformato, ĝi estas bone projekcita. La demando estas kion ĝi ebligas.

La Atribua Defio

La specifikaĵo modelas aŭtorecon kiel klasifikon. Sed LLM-asistita programado estas konversacio. Vi priskribas kion vi volas. La LLM generas ion. Vi redaktas duonon de ĝi, malakceptas funkcion, petas revizion, akceptas la duan provon, kaj poste permane riparas ekstreman kazon. Poste, alia LLM refaktorigas la tutan blokon.

Kiu skribis tiun kodon? La limo inter homa kaj LLM-aŭtoreco estas malklara, kaj ĝi fariĝas pli malklara. Plej multa reala kodo finiĝos kiel mixed, kaj se preskaŭ ĉio estas mixed, la klasifiko ne multe diras al vi.

Lininivelaj atribuo ankaŭ havas daŭrotempan problemon. Spuro diras “Claude skribis liniojn 10-50 ĉe enmeto abc123.” Du enmetojn poste, iu reformatigas tiun blokon aŭ ekstraktas funkcion el ĝi. La respondo de la specifikaĵo estas ĉenigi tra git blame, kaj enhavhaketoj povas helpi spuri kodon kiu moviĝas. Sed en laborfluo kun rebase kaj squash-merge, la ĉeno rompiĝas. Ĉi tiuj estas malfacilaj problemoj — la tipo kiun frua RFC devus surfacigi.

La Mankanta Ago

La specifikaĵo eksplicite malkonfesas la evidentajn uzojn: ne por kodposedado, ne por kvalitotaksado, ne por trejndatuma deveno. Ĝi diras “travideblecon”. Sed travidebleco estas rimedo, ne celo.

Se la kodo pasas revizion kaj testojn, kio ŝanĝiĝas ĉar LLM skribis ĝin? Se ĝi estas cima, vi riparas ĝin sendepende. La specifikaĵo neniam konektas atribuon al konkreta ago. Datumoj eniras, sed ne estas difinita maniero ricevi respondojn. Tio estas la breĉo — ne la formato, sed la uzkazo.

Kie Ĝi Fariĝas Interesa

Jen kion mi pensas Agent Trace efektive indikas, eĉ se la specifikaĵo ankoraŭ ne diras ĝin.

Malantaŭ ĉiu LLM-generita funkcio estas rezonaj ĵetonoj, malĝustaj turnoj, reprovoj, kuntekstŝanĝoj kaj ilalvokoj. Agento ne nur produktas kodon — ĝi trairas procezon por atingi ĝin. Ĝi legas dosierojn, miskomprenas interfacon, retroiras, provas alian aliron, rulas teston, riparas la malsukceson kaj atingas solvon. Tiu procezo estas nevidebla en la fina diff.

La hoko jam kaptas pli ol nur atribuon. Rigardu la enigsuprfacon:

interface HookInput {
  hook_event_name: string;
  model?: string;
  transcript_path?: string | null;
  conversation_id?: string;
  generation_id?: string;
  session_id?: string;
  file_path?: string;
  edits?: FileEdit[];
  command?: string;
  duration?: number;
  is_background_agent?: boolean;
  composer_mode?: string;
  tool_name?: string;
  tool_input?: { file_path?: string; new_string?: string; old_string?: string; command?: string };
  tool_use_id?: string;
}

Modelo, seanco, konversacio, ilo, komando, daŭro, ĉu ĝi estas fona agento, la komponista reĝimo, ĉiu ilalvoko kun sia enigaĵo. Ĉi tiuj ne estas nur atribuaj datumoj. Ĉi tiuj estas procezdatumoj. Kaj procezdatumoj estas kie loĝas la vera valoro:

La Ĝusta Demando

Agent Trace estas frua. Ĝi estas RFC kun realaj defioj ĉirkaŭ atribumodeligado, intervaldaŭreco kaj demandosemantikoj. Sed la instinkto estas ĝusta — ĉar LLM skribas pli da kodo, ni bezonas strukturitajn datumojn pri kiel tio okazas.

La plej utila versio de ĉi tiu specifikaĵo eble ne estas “kion la LLM skribis?” sed “kiel la LLM atingis ĝin?” La lininivelaj ĉeflibroj estas startpunkto. La procesospuro — la rezonado, la iteracioj, la kosto atingi solvon — estas kie ĉi tio fariĝas io kion teamoj efektive uzas por skribi pli bonan kodon kun LLM.

Tio estas la specifikaĵo sur kiu mi volus konstrui.