軌跡
kiseki renders agent traces. turns, reasoning, tool calls, subagents, and edits, live or after the fact.
"The test suite fails. First send an explore subagent to find every caller of median() so we know what a fix could break. Then fix src/stats.js with the smallest change, run npm test, and tell me what was wrong in two or three sentences."
a real opencode session (claude sonnet 5.5) fixing three bugs in a toy repo, converted by @tetraslam/kiseki-adapters. open the explore branch, then the edit's patch.
drop an opentraces .jsonl, a claude code session, an opencode session export, or a codex or pi session anywhere on this page. it renders in your browser; nothing is uploaded.
one data model
kiseki reads OpenTraces 0.9. ai sdk steps, claude code, opencode, codex, and pi sessions come in through adapters that produce the same record.
your app owns the job
kiseki renders agent semantics. you bring renderers per tool name, storage, and auth, so a search product shows people cards and an rl harness leads with reward.
10,000 steps, nothing moves
the timeline is virtualized and measured. in the perf run, a 10,000-step trace paints its first rows 66ms after the record arrives, with a layout shift of 0.000.
one component
pass a record. selection, expansion, and search are controllable props, so a permalink can live in your url. heavy tool output loads only when someone opens the call.
press j k to move, enter to open, [ ] to fold subagents, / to search, and c to copy a link to the step.
import { Trace } from "@tetraslam/kiseki";
import "@tetraslam/kiseki/styles.css";
<Trace
record={record}
renderers={{ tools: { searchProfiles: PeopleCards } }}
loadPayload={(step, callId) => fetchOutput(step, callId)}
/>