Skip to content
vnmoorthyPublic

About

Voice AI that interviews departing experts and turns tacit knowledge into a living, cited knowledge base their successor can talk to. Higgs Realtime · Nebius · LiveKit · Twilio · runs with zero keys.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

Tacit — every expert who leaves takes a library with them. Tacit interviews them first.

Tacit

A voice AI that interviews your departing experts and turns what's in their head into a living, cited knowledge base their successor can talk to.

Live demo CI Node ≥ 22.13 TypeScript MIT Voice AI track

Live demo · Quickstart · How it works · Architecture · API · Phone interviews · 3-minute demo script · Slides

Tacit demo: the constellation lighting up the atoms behind an answer
▶ Watch the 2-minute product walkthrough (narrated by Higgs Audio).


The problem

Every day about 10,000 Americans turn 65.¹ When a 19-year payroll lead, a staff SRE or a plant technician walks out, the runbook they never wrote goes with them: the real cut-off time (3:30, not 5), the vendor rep who actually answers, the macro on their desktop, the rule that exists because of an incident nobody remembers.

Companies know this. Fortune 500s lose an estimated $31.5B a year from failing to share knowledge,² and 42% of the skills needed for a job are known only by the person currently doing it.³ The fix has always been "write the documentation". Experts don't. But they will talk for an hour.

Tacit makes the talking the documentation.

¹ Pew Research Center · ² IDC, via Babcock (2004) · ³ Panopto Workplace Knowledge and Productivity Report (2018)

What Tacit does

Interview room Ask the twin
1 · Interview. A voice agent interviews the expert one question at a time, follows the thread ("you said usually — when isn't that the case?"), and probes for failure modes, cut-offs and who-to-call. Knowledge atoms appear as they speak; the coverage map fills in live. 2 · Hand over. The successor asks the expert's twin. Answers come only from what the expert said, with citations back to their own words, spoken in their cloned voice. If the twin doesn't know, the question is queued and becomes the first question of the next interview.
Capture overview with coverage map Knowledge base
3 · Measure. Tacit plans a coverage map of 6–8 knowledge domains from the role and context, weighted by priority, and shows exactly what a successor still can't do. 4 · Curate & compile. Nine atom types (procedure, rule, gotcha, contact, tool, decision, glossary, risk, story) with source quotes. Verify, edit, search. One click compiles a handover document.

Features

  • Real-time voice interviews on Boson AI's Higgs Realtime (speech-to-speech, semantic turn detection, barge-in), with browser voice where supported and a type mode. Reconnect voice or continue typing in the same saved interview if audio fails.
  • Live extraction of typed, cited knowledge atoms while the expert is still talking.
  • Coverage map: planned domains × target questions; the interviewer steers to what's missing.
  • The successor twin: hybrid retrieval (BM25 + embeddings, RRF-fused), grounded answers with [n] citations, confidence gating.
  • The closed loop: unanswered successor questions are queued and asked first next session.
  • Voice cloning: with the expert's consent and reference recording enabled, Higgs Audio can clone their voice so the twin speaks like them. Otherwise the twin uses a stock voice, with browser speech as fallback.
  • Multilingual interviews: the expert is interviewed in their own language (Spanish, Tamil, Mandarin, 18 presets, Higgs supports 100+) while every atom is written in English with the verbatim quote preserved.
  • Phone interviews: Tacit calls the expert (Twilio SIP → LiveKit → Higgs Realtime agent). See docs/PHONE.md.
  • Handover document compiled from everything captured (Markdown → Confluence/Notion/PDF).
  • The Constellation: a 3D knowledge graph of atoms, domains and the people and systems they mention, with bloom and particle flows. Steer it with your hands through the camera (point to reveal, pinch to grab, open palm to orbit, two hands to zoom; on-device MediaPipe hand tracking), step inside it with your live camera as the backdrop, and ask it questions by voice: the cited atoms light up while the camera flies to them.
  • Runs anywhere: any OpenAI-compatible LLM (Nebius first-class), Anthropic, local Ollama, or an offline demo brain. The same engine runs fully in the browser, so the live demo works with no backend at all.
  • Zero native runtime dependencies: Node's built-in SQLite and one Docker image. Unit tests and repeatable browser checks cover persistence, voice lifecycle, gestures and the demo journey.

Who it's for

Situation What Tacit does
The retirement wave (Peak 65: ~4M US retirements a year) Three interviews before the last day; the successor gets a twin instead of a binder.
Resignations, layoffs, contractor exits Two weeks' notice is enough. Offboarding becomes a knowledge capture, not a checklist.
Onboarding the successor New hires ask the twin of the person they replaced; gaps become interview questions.
Open-source maintainers stepping down Release rituals, flaky tests, sponsor contacts, the token only they hold.
Clinical and care teams Charge nurses and lab managers, interviewed in their own language, atoms in English.
Plants, utilities, field service Machine quirks, fast suppliers, safety rules born from incidents; phone interviews for people without desks.
Regulated and public sector Cited, verifiable atoms and a handover document that satisfy key-person retention audits.
Founders and family businesses Judgement calls, relationships and handshake deals captured before succession or acquisition.
Family memory Interview a grandparent: recipes, stories and sayings, answered in their own voice.

Role templates for payroll/finance, engineering/SRE, operations/manufacturing, sales, HR, clinical care, clinical nursing, utilities/field service, hospitality management, public-sector casework, research labs, open-source maintainers, founders/executives and family memory drive the offline planner; the LLM planner adapts to any role.

Quickstart

git clone https://github.com/vnmoorthy/tacit.git && cd tacit
pnpm install
pnpm dev          # API on http://localhost:8787, web on http://localhost:5173

That's it. With no keys Tacit runs the offline demo brain and your browser's speech APIs where supported. Click Load sample captures on the dashboard to meet Maria (payroll), Dev (SRE) and Luis (plant maintenance).

To make it good, add keys to a .env at the repo root (see .env.example):

NEBIUS_API_KEY=...     # interviewer + extraction on Nebius Token Factory (or OPENAI_API_KEY / ANTHROPIC_API_KEY)
BOSON_API_KEY=...      # Higgs Realtime voice, Higgs Audio TTS + voice cloning

If Ollama is running locally it's auto-detected (llama3.1:8b + nomic-embed-text), no key needed.

pnpm seed         # load sample captures into SQLite
pnpm test         # core, API, voice, gestures and persistence tests
pnpm build        # production web build (served by the API)

For client demos, build first and run pnpm start at http://localhost:8787 so source edits cannot interrupt the presentation. See demo readiness and verification for browser checks, live-provider validation and device rehearsal.

How it works

Tacit architecture

The engine (packages/core)

One isomorphic TypeScript engine runs on the server (SQLite) and in the browser (localStorage). Everything is a pure function of a Store and a Brain.

Stage What it does
Planner Role + context → 6–8 domains, each with a priority (1–3) and 2–3 open target questions. Next domain = lowest coverage adjusted by priority.
Interviewer One question per turn. Follows up on hedges ("usually", "depends", "the trick is"), asks the successor's queued questions first, moves on when a thread is exhausted, keeps every turn under 45 words so it reads aloud well.
Extractor Expert answer → 1–6 typed atoms with title, markdown content, tags, confidence, domain and a verbatim sourceQuote. Runs in parallel with next-question planning (≈3.5 s per turn on Nebius).
Coverage Per domain: 55 % × questions asked + 45 % × min(1, atoms/5). Capture-level: weighted by priority (3/2/1).
Twin BM25 over title+content+tags+quote, plus dense cosine when embeddings exist, fused with reciprocal-rank fusion. The brain answers only from the top atoms and reports confidence; low/none queues the question.
Handover Compiles atoms by domain and type, verified marks, quotes, open questions, session log.

Two interchangeable brains implement the same interface:

  • LLMBrain — any model via OpenAICompatibleLLM (Nebius, OpenAI, Groq, Ollama, gateways) or AnthropicLLM. JSON is validated; on any failure it silently falls back to…
  • HeuristicBrain — no model at all. Role templates plan the map; linguistic cues (first/then/never/call/careful/…) classify sentences into atoms; retrieval is extractive. Every button works offline.

The voice stack (apps/web/src/lib/voice)

A live Higgs Realtime session: the expert talks, Tacit listens, atoms land in real time
A live Higgs Realtime session captured in an automated browser run with a synthetic microphone: expert audio → transcript → atoms → refreshed agenda → next spoken question.

Engine Path When
Higgs Realtime Browser ⇄ wss://api.boson.ai/v1/realtime (ephemeral bai-client-secret, PCM16 @ 24 kHz, OpenAI Realtime events). User transcripts via higgs-stt-3.1 → /sessions/:id/turns for extraction; the agenda is refreshed with session.update after every answer. BOSON_API_KEY set
Browser voice Web Speech recognition (1.6 s end-of-turn) → API → speechSynthesis. When supported and microphone permission is granted; text input remains available
Higgs Audio /v1/audio/speech for the twin's spoken answers; /v1/audio/voices clones the expert from a reference clip recorded during a browser-voice session. BOSON_API_KEY set
Phone Twilio SIP trunk → LiveKit room → services/phone-agent (LiveKit Agents) on Higgs Realtime → Tacit API. LiveKit + Twilio configured

The Constellation (apps/web/src/pages/Graph.tsx)

The Constellation: a 3D knowledge graph lighting up the atoms cited by the twin's answer
Ask "the ACH file bounced on a Friday afternoon, what do I do?" and the cited atoms glow while particles run along their links. Hand gestures via MediaPipe: ☝️ point · 🤏 pinch to grab · ✋ orbit · 🙌 zoom.

Piece How
Graph buildGraph() in core: domain hubs, atom nodes coloured by type, entity nodes for people, tools and teams (from tags), in / mentions / related links (BM25 neighbours). Served at GET /captures/:id/graph; also built in-browser in standalone mode.
Rendering 3d-force-graph + three.js, UnrealBloom post-processing, sprite labels, directional particles on highlighted links.
Hands @mediapipe/tasks-vision Hand Landmarker (WASM, on-device, two hands), with model and WASM served locally. Camera starts only after Use my hands. Stable hand identities, pinch hysteresis and mirrored preview mapping keep pickup/orbit/zoom transitions predictable; lost hands release dragged nodes.
Immersive "Step inside": the mirrored camera feed becomes the scene background (three.js VideoTexture) under a camera-locked veil, with the hand skeleton drawn full-screen, so the presenter stands in the constellation.
Voice Continuous listening with a small command grammar: "show me the risks", "focus on Kevin Tran", "zoom in", "rotate left", "step inside", "reset". Anything else is a question for the twin: grounded answer, spoken back (Higgs Audio when available), cited atoms highlighted and framed. Listening pauses while the twin speaks.
Record One button records the constellation (with your camera backdrop when inside) from the WebGL canvas to a video file.

Atom types

Type Meaning Example from Maria
procedure Ordered steps First hour after an ACH rejection
rule Always / never / if-then Real ACH cut-off is 3:30 pm, not 5
gotcha Trap or quirk ADP "filed" does not mean "deposited"
contact Who to call, and for what Kevin Tran, ADP named rep (skip the queue)
tool System, report, script, spreadsheet RECON_v7 macro that lives only on her desktop
decision Judgement call and the factors weighed Friday rejections: same-day wire beats waiting
glossary Term or acronym —
risk What can go wrong, trigger, impact Disability-carrier portal login is in Maria's name
story Anecdote worth keeping —

Repository layout

tacit/
├─ packages/core/        engine: types, brains, retrieval, coverage, handover, samples, tests
├─ apps/api/             Hono + node:sqlite REST API, provider auto-detection, Boson + LiveKit glue
├─ apps/web/             Vite + React 19 + Tailwind v4, two voice engines, standalone mode
├─ services/phone-agent/ LiveKit Agents worker (Python) for phone interviews
├─ docs/                 ARCHITECTURE · API · PHONE · DEMO · assets
├─ slides/               Tacit.pptx (10 slides) + storyboard
├─ Dockerfile · docker-compose.yml · .github/workflows (CI, GitHub Pages)

API

All endpoints are JSON under /api. Full reference in docs/API.md.

Method Path Purpose
POST /captures Plan a capture (coverage map) for an expert
POST /captures/:id/sessions Start an interview; returns the opening question
POST /sessions/:id/turns Expert said something → atoms + next question
POST /captures/:id/ask Ask the twin → grounded answer with citations
GET /captures/:id/handover Compiled handover Markdown
POST /voice/higgs/session Ephemeral Higgs Realtime credentials + interviewer instructions
POST /voice/tts · /captures/:id/voice/clone Higgs Audio speech · clone the expert's voice
POST /phone/call Dispatch the phone interviewer and dial the expert

Deploy

  • Docker: docker compose up → http://localhost:8787 (API + web, SQLite on a volume).
  • Any Node host (AWS App Runner / ECS / Fly / Render): pnpm install && pnpm build && pnpm start, set API_PORT or PORT, mount data/.
  • Static demo (no backend): VITE_BASE=/tacit/ pnpm --filter @tacit/web build → deploy apps/web/dist anywhere. The GitHub Pages workflow does this on every push to main.

Roadmap

  • Inbound phone line ("call Tacit when you have a minute") and scheduled call-backs
  • Multi-expert captures and team knowledge graphs across captures
  • Confluence / Notion / SharePoint export and Slack twin
  • SSO, roles, audit log, retention policies
  • Evaluation harness for extraction quality across models

Built at

Build an AI Startup in One Day, an Open Source for AI hackathon in San Francisco (Voice AI track), and the Boson Higgs Audio Hackathon 2026 (tracks: Voice at Work · Agents That Act · Breaking the Language Barrier). Partner technology used: Boson AI (Higgs Realtime, Higgs Audio TTS + voice cloning), Nebius Token Factory (inference + embeddings), with LiveKit + Twilio for telephony. Slides in slides/, demo script in docs/DEMO.md, submission kit in docs/SUBMISSION.md.

Contributing

See CONTRIBUTING.md. Issues and PRs welcome, especially new role templates and provider adapters.

License

MIT

About

Voice AI that interviews departing experts and turns tacit knowledge into a living, cited knowledge base their successor can talk to. Higgs Realtime · Nebius · LiveKit · Twilio · runs with zero keys.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages