Get Started
Archive your coding sessions locally as plain text JSONL. 18 harnesses in, one dashboard out.
unfirehose-nextjs-logger
Self-hosted analytics dashboard for machine learning coding agent sessions. Captures thought tokens, tool calls, diffs, and todos. Browse session timelines, view diffs, track cross-session tasks. AGPL-3.0, free forever.
$git clone https://github.com/russellballestrini/unfirehose-nextjs-logger
$cd unfirehose-nextjs-logger && npm install && npm run dev
uncloseai-cli
Our machine learning coding agent. Routes across providers, writes unfirehose/1.0 natively, and reports every refusal with the upstream that said no. Works with any OpenAI-compatible endpoint.
$git clone https://git.unturf.com/engineering/unturf/uncloseai-cli
SDKs
Client libraries for building your own integrations. Our JSONL schema is open — a client in any language is a file writer, and a chaining writer is a participating one: its journal proves its own order and completeness, and our witness proves nobody altered it after we first saw it.
@unturf/unfirehose
Core SDK. Session ingestion, querying, and export, plus tamper evidence: a hash-chain writer and verifier (unfirehose-chain-v1, merkle-v1 roots), and a witness that records every line of every journal it reads so an edit after first sight reads rewritten, whoever wrote the file.
$npm install @unturf/unfirehose
unfirehose-sdks/go
Native Go logger. Sessions, messages, tool calls, todos, metrics, projects, and throttle records for every way a provider refuses a call. Writes straight to our on-disk format, so a Go harness needs no adapter. Every line is hash-chained and a closed session carries its Merkle root (go/v0.2.0), so a Go harness on it is verified from its first byte, pinned to the same known-answer bytes as our Python, TypeScript and JavaScript writers.
$go get git.unturf.com/engineering/unturf/unfirehose/unfirehose-sdks/go
npm Packages
Additional TypeScript packages under the @unturf scope. Used internally by the dashboard.
Build Your Own
No API to call. A harness writes unfirehose/1.0 JSONL to disk and our dashboard discovers it on its next ingest.
# One session, one file. Directory name = your harness, then a slug of the working directory. ~/.myharness/unfirehose/home-you-git-project/<session-uuid>.jsonl # One JSON object per line. A session header, then messages; a throttle record when a provider says no. {"$schema":"unfirehose/1.0","type":"session","id":"…","cwd":"/home/you/git/project"} {"$schema":"unfirehose/1.0","type":"message","role":"assistant","model":"…","content":[{"type":"text","text":"…"}],"usage":{"inputTokens":120,"outputTokens":40}} {"$schema":"unfirehose/1.0","type":"throttle","kind":"rate_limit","upstream":"openrouter","httpStatus":429}
Full spec, JSON Schema files and 18 adapter docs ship in @unturf/unfirehose-schema.