Cb
CASEBOOK
COPILOT
The model reasons. The casebook survives.
EMAIL
PASSWORD
{{ authError }}
{{ authBtnLabel }}
{{ authToggleLabel }}
JWT auth · Xano backend
Cb
CASEBOOK
COPILOT
/
{{ crumb }}
{{ crumbStatus }}
{{ statusLabel }}
Audit ledger
← Back to case
← Back to case
Copy as markdown
Generate record
{{ userEmail }}
Sign out
Cases
{{ caseCount }} on record
+ New case
Every case is a durable record — evidence, brief, and ledger survive the investigation.
Start
{{ c.title }}
{{ c.statusLabel }}
{{ c.last }}
FOCUS
{{ c.brief_focus }}
TURN 1 OF THIS CASEBOOK
Start the investigation — paste logs, describe symptoms, or state what changed. Your input is stored byte-exact as Evidence.
YOU · TURN {{ t.turn }} · {{ t.time }}
{{ t.text }}
{{ t.evLabel }} · {{ t.evMeta }}
COPILOT · TURN {{ t.turn }} · {{ t.time }}
{{ t.body }}
WEB LOOKUP
{{ t.card.engineLabel }}
via SerpApi · no model call
REQUESTED BY YOU
TURN {{ t.turn }} · {{ t.time }}
“{{ t.card.query }}”
{{ r.position }}
{{ r.letter }}
{{ r.domain }}
{{ r.title }}
{{ r.snippet }}
stored as {{ t.card.evLabel }} · immutable
View evidence →
ANSWER FAILED
TURN {{ t.turn }} · {{ t.time }}
{{ t.error }}
{{ t.note }}
↻ Re-run this input
MANUAL — runs only when you decide
YOU · {{ t.time }}
{{ t.text }}
{{ s.symbol }}
{{ s.label }}
→
async worker · polling every 2s
This turn has been pending unusually long — the worker may have died. Your input is preserved.
↻ Re-run this input
●
WEB LOOKUP
“{{ t.query }}” — fetching sources…
Enter to send · Shift+Enter for newline · input preserved even if the answer fails
Send
INVESTIGATION BRIEF
STALE · {{ staleLabel }}
{{ staleLabel }}
The investigation brief appears here after the first turn.
CURRENT FOCUS
{{ briefFocus }}
{{ consideringLabel }}
{{ e }}
NEXT UP
□
{{ n.text }}
Verify on web
CONFIRMED
{{ e }}
RECORD
v{{ sideRecVersion }}
{{ sideRecMeta }}
Open record →
No record yet
Generate →
AD-HOC WEB LOOKUP
google
google_news
Search
Audit ledger
{{ crumb }}
Append-only. No update or delete endpoint exists for this table — every call, every failure, on record.
{{ l.type }}
{{ ev.time }}
{{ ev.type }}
{{ ev.latencyLabel }}
{{ ev.reason }}
{{ ev.summary }}
Case record
{{ crumb }}
{{ ch }}
{{ layerNotice }}
{{ s.symbol }}
{{ s.label }}
→
async worker · polling every 2s
RECORD · v{{ recVersion }}
as of turn {{ recAsOf }} · {{ recTime }}
{{ recLatency }}
fixed after creation · append-only
{{ recBody }}
Later versions are not guaranteed to carry everything from earlier ones.
{{ v.chev }}
{{ v.label }}
{{ v.latency }}
{{ v.body }}
No record yet. Generate one when you hand over — it assembles the whole case into a fixed, citable account.
Generate record
{{ dLabel }}
{{ dKind }}
created by turn {{ dTurn }}
×
Stored
byte-exact
— whitespace and line breaks preserved · {{ dBytes }} bytes · immutable
{{ dContent }}
QUERY
“{{ dQuery }}”
engine: {{ dEngine }} · fetched {{ dFetched }} · provenance recorded
#{{ r.position }}
{{ r.letter }}
{{ r.domain }}
{{ r.title }}
{{ r.link }}
{{ r.snippet }}
Copied as markdown