Skip to content

Telltale

Architecture

Telltale runs a repeatable batch pipeline: discover session stores, ingest new or changed files, parse client-specific formats, normalize into shared records, detect risky patterns, score findings, optionally triage with LLM, and emit JSONL events.

Pipeline stages

Each stage has a stable interface so new sources and rules can be added without disrupting existing detections.

  • Discover: enumerate known session stores for enabled clients.
  • Ingest: read new or changed files/databases using offsets, mtimes, or content fingerprints.
  • Parse: convert client-specific transcript formats into normalized conversation records.
  • Context Window: attach bounded preceding user/assistant messages to each tool call.
  • Detect: run static regex filters over tool names, command strings, arguments, paths, URLs, and adjacent messages.
  • Score: aggregate rule scores and modifiers into a risk result.
  • Triage: call Llama Guard and a small triage model only above configured thresholds.
  • Emit: send canonical events through an event sink. The default sink appends local JSONL for SIEM shippers.

Module boundaries

Artifact Paths

discovery

Knows where each agent stores sessions

Client-specific path resolution.

parsers

Client-specific transcript/database parsing

Format-specific extraction.

normalizer

Creates common records with stable field names

Schema V1 contract.

rules

Loads and evaluates regex rules

YAML-defined detections.

scoring

Combines matches, context, and thresholds

Risk aggregation.

triage

OpenAI-compatible client and prompts

LLM-based triage.

event

Redaction, schema-shaped event builders, evidence hashes, and local JSONL serialization

Event construction.

sink

Vendor-neutral event delivery boundary

Sink-specific envelopes.

state

Scan checkpoints and duplicate suppression

Idempotency.

Normalized record types

The internal normalization contract is NormalizedRecordV1. It sits between source-specific parsers and downstream detection, triage, and export code.

  • conversation.message: user, assistant, system, developer, or tool-result content.
  • tool.call: tool name plus normalized arguments and raw evidence hash.
  • tool.result: exit status, stdout/stderr summary, file metadata, or error.
  • detection.event: rule matches and score before optional triage.
  • triage.event: LLM/guard decision with model metadata and redacted rationale.

Triage context package

The triage agent receives a bounded context package, not full raw transcripts:

  • Client, agent, model, provider, workspace, session id, and timestamps
  • Matched tool call details
  • Matched rule ids and explanations
  • Preceding bounded user/assistant messages
  • Redacted file paths, command lines, URLs, and tool results
  • Prior related detections from the same scan window

Design intent

The architecture favors deterministic, fixture-tested behavior first, with richer triage only after thresholds justify it.