Callsheet banner
ml-lubich ml-lubich

Callsheet

Development community

Description

Turn any recording of a call into one self-contained HTML readout: local Whisper, multi-agent analysis, hand-authored SVG diagrams, adversarial fact-checking, and a hold-out comparison that proves independence.

Installation

This entry records only its repository, not the path inside it, so there is no exact command to give. Open the source below and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

README

callsheet

Turn a recorded conversation into a single self-contained HTML document that someone who was not on the call can read, where every claim traces to a timestamp.

One file out. No external requests, no CDN, no fonts to fetch — open it from a USB stick in five years and it still works. Transcription runs locally through whisper.cpp; the audio never leaves the machine.

What it does

recording ──▶ transcript ──▶ turns.json ──▶ chunk1..N.txt ──▶ content.json ──▶ index.html
             whisper.cpp     metrics.json   (agents read)     (agents write)   (one file)

Python does the mechanical parts: transcription, parsing, chunking, schema validation, injection, sealing and overlap measurement. The reading and writing is done by agents, and `SKILL.md` is the Claude Code skill that drives them.

The page itself is a strip chart: every turn is plotted on elapsed time, one speaker above the baseline and one below, bar height by word count. Acts, threads, evidence and quotes are all registered to that same axis, so the structure of the conversation is position in time rather than decoration. The whole transcript ships inside the page with search and per-speaker filtering, and every timestamp anywhere on the page jumps to the turn it came from.

Install

pip install -e ".[dev]"

Use

callsheet transcribe call.m4a -m ~/models/ggml-large-v3.bin -o work/transcript
callsheet parse work/transcript.txt -o work
callsheet chunk work/turns.json -n 4 -o work

# ... agents read work/chunk*.txt and write work/content.json ...

callsheet build --content work/content.json --turns work/turns.json \
                --metrics work/metrics.json --diagrams out/diagrams.html \
                -o out/index.html

`callsheet build` refuses to run on a `content.json` that does not validate, and names the field that is wrong. It reports the number of external requests in the finished page, which should be zero.

Transcript formats

Detected by inspection,