---
title: Her · हेर
emoji: 🕵️
colorFrom: gray
colorTo: indigo
sdk: gradio
sdk_version: 6.16.0
app_file: app.py
python_version: "3.10.13"
pinned: false
short_description: A detective for your Claude Code sessions
startup_duration_timeout: 1h
tags: [backyard ai, off the grid, off-brand, field notes]
---
Her · हेर
हेर — Marathi for “detective.”
A detective for your coding-agent sessions. Drop a Claude Code session export and Her
reads the whole trace — so you can see what actually happened, and what to do better
next time.
---
## What this Space does
Upload your Claude Code session exports (`.jsonl`) and Her investigates them:
- **The journey.** Every query as a node, sized by cost, the heaviest glowing — with a
plain-English **“what happened”** on top and the deterministic cost-shape below.
- **The dataflow.** The tool calls along each turn, with the **proven value-flow** path
highlighted on focus (a value that reappeared *verbatim* from an earlier result) —
proven (solid) vs. hypothesis (dotted), always kept separate.
- **Risky moves, surfaced.** Deploys, production & config changes, secrets — the actions
worth a second look, each traceable to the turn it happened in.
- **What to do better.** Tips grounded in Anthropic’s and the community’s best practices.
Her **suggests, never asserts** — and stays silent unless a named, fixable pattern fires.
- **Ask Her.** A chat bound to your trace. *“Why was this turn so expensive?”* → she
answers from the trace, **cites the turns**, and opens the exact tool call.
## How to use it
**One or a few sessions — drag & drop.** Find a session file under
`~/.claude/projects//.jsonl`, then drop it onto the page
(or click **Upload .jsonl**). One file opens a **session view**; drop several to build a
**project view** across them.
**All your projects at once — the uploader script.** Grab `scripts/her_upload.py` from
this Space’s **Files** tab (or `hf download / scripts/her_upload.py
--repo-type space --local-dir .`) and run it:
```bash
python scripts/her_upload.py
```
It **copies** the sessions you pick into a staging folder, **scrubs likely secrets**, and
**uploads** them — each step waits for your approval — then prints a link that opens your
**Projects view** here. A project groups many sessions under one working directory, with a
plain-English **changelog across sessions** and **Ask Her about the project**
(*“when did we add column X?”* → names the exact session).
## Your data & privacy
This is the hosted version, so your sessions **are** uploaded to analyze them — but they
stay yours and don’t stick around:
- **Private to your browser.** Each browser gets a random token (`crypto.randomUUID()`);
your uploads land in a namespace keyed to it, so **you only ever see your own sessions**.
- **Temporary by default.** A background sweeper deletes anything older than **24 hours**;
**“clear my data”** wipes your namespace immediately, and the tab-close does a best-effort
clear too.
- **Scrubbed on the way in.** The uploader redacts likely secrets before anything leaves
your machine (best-effort — review the staged copies if unsure).
- **No trace content ever leaves the Space.** The optional “share learnings” path (bare,
scrubbed *tool names* only — never commands, paths, code, or JSONL) is **off** here.
- **Guardrails.** Up to **70 MB** per session file, **50 sessions** per project, **50
projects** per browser — enough for real work, capped so no one can flood the box.
## What makes her trustworthy
- **Deterministic core, model for prose only.** Value-flow edges, token sums, loop &
re-read detection, heavy-turn ranking, entity & binary extraction, risk scanning —
**pure code, no model.** A model is used *only* to write the English and to *propose*
(never assert) findings. The numbers don’t move when the model changes.
- **Proven vs. hypothesis is always separated.** A verbatim value reappearance is asserted;
temporal proximity is a hypothesis you judge.
- **Cost alone is never advice.** “Expensive but clean” is a valid, important output.
## The model
Narration — the plain-English summaries, advice prose, and chat — runs **on the Space**
on **`nvidia/Nemotron-Mini-4B-Instruct`** via **ZeroGPU**. The first narration after a cold
start can take a few seconds while the GPU spins up. Swap the model with the
**`SPACE_MODEL_REPO`** Space variable — no code change. (Tool/binary identification here
is the **bundled offline registry** — top Homebrew/npm/PyPI tools shipped with the Space;
the live registry enricher is **off** here, see `HER_ENRICH` below.)
## How it’s built
ZeroGPU is Gradio-SDK-only and its GPU quota needs the HF iframe auth headers forwarded,
so the app runs in **Gradio Server mode** (`app.py`):
```
upload ─▶ /data//… ─▶ engine (deterministic) ─▶ narrator (ZeroGPU) ─▶ UI
(HF storage bucket) pure code, no model Nemotron, prose only
```
- **Deterministic engine endpoints** (`/api/health|sessions|upload|analyze|project|clear`)
are plain FastAPI routes the React UI calls with `fetch`.
- **GPU narration** (`overview · advice · chat · project_chat · project_narrative`) are
Gradio API endpoints the browser calls via `@gradio/client` (auth forwards for quota).
- **Storage** is an HF **bucket** mounted at `/data`, namespaced per browser; the React UI
(`ui/dist`) is served from `/`. The deterministic engine is the same one the local
product uses — only the transport and the model backend differ.
## Prefer to keep everything local?
The same repo ships a **fully-local** product: `./her` finds llama.cpp, downloads a local
GGUF model, and runs the whole thing on `127.0.0.1` with **no upload and no egress** —
it reads `~/.claude` directly. Use that if you’d rather nothing leave your machine.
## Self-host this Space
```bash
python scripts/deploy.py --space / --create
```
Creates the Space + a private storage bucket, mounts the volume, uploads the app, and
requests ZeroGPU. **ZeroGPU needs a paid plan**: a personal **PRO** account for a
`/` Space, or a **Team/Enterprise** org for an `/` Space. See
`DEPLOY.md` for the full mechanics (bucket mount, factory reboot, env vars).
---
#backyard-ai
Blog: https://huggingface.co/blog/build-small-hackathon/her-blog
Social Media Post: https://www.linkedin.com/posts/ashishchalke_buildsmallhackathon-huggingface-gradio-ugcPost-7469368911361204224-IENm/?utm_source=share&utm_medium=member_ios&rcm=ACoAAAbqZTcBi7SuPZ07c89T6iyjc2PEJKICvE4
Demo: Video attached to space
हेर — she watches the work, not you.