Research · guide

How to build your own real-time assistant for important conversations

Artorix is an assistant that listens to a meeting together with me: before the conversation I load a plan, and during it Artorix shows whether we are on plan, what hasn’t been asked yet and what to ask next. I control it from an external MIDI controller: pads let me tag the conversation silently, and knobs and faders change the processing parameters live, during the meeting.

Status
Research, my working tool
Access
The source code on request, a pilot on request. Once Artorix is out for others, the link goes here
Guide
23 September 2026
Stack
Python, FastAPI, Soniox, Claude
Reading
15 min
My Avatar EMP16 in my hand. The pads carry stickers with the tags in Russian: interest or drive, bored or flat, anxious, irritated, closed up, dodged, pushing or interrupting, enthusiasm, skepticism, worry, indifference, important or return, topic jump, I talk too much, analyze now. Four knobs and four faders on the left.
My actual controller. The stickers on the pads are the tagging layers from the diagram below (in Russian, the language of most of my meetings); the knobs and faders change the analysis parameters during the meeting.

What this guide is

This is how Artorix works, what the measurements on real meetings showed and how to build an assistant like it yourself. The guide describes the approach and the lessons, not the source code; I share the code in person if you are really interested.

For me Artorix is not a product but a working tool: I run interviews and negotiations with it. It remembers the conversation; the people live in CoFlow, my personal system. Artorix and CoFlow are the current versions of tools I have built and rebuilt many times.

Research Once Artorix is out for others, the link will be here.

  • ×17spread of hourly cost between the extreme positions of the Pace fader
  • $0.71per meeting hour in the normal mode
  • 16pads: four layers of silent tagging
  • 2audio tracks: the microphone is me, the computer output is the other person
Where the people liveArtorix remembers the conversation; the person lives in CoFlow: the brief comes from there, the outcome goes back. CoFlow.

The idea

There are more tasks in a conversation than attention.

When you run an interview or a negotiation, you have to listen, think about the next question, keep the plan in your head and read the other person’s state, all at once, and then review it all afterwards. People do this badly not for lack of skill: there are more tasks than attention.

Artorix’s bet: a conversation is data, and part of the work on it can be taken off the person at the moment when it can still change something. Not “a transcript afterwards” but a prompt inside the meeting. Three rules follow from that and shaped the whole design:

  • real time matters more than precision;
  • silent tagging matters more than convenient tagging: you can’t type during a conversation, the other person sees it, so buttons instead of a keyboard;
  • any feature that pulls your attention away from the other person is harmful, even if it is useful.

Use cases: negotiations, customer-development interviews, podcast recordings. The plan is pasted as free text; the model breaks it into sections and questions itself. Demanding that someone fill in a form before a meeting is a sure way to make sure the system never gets used.

The “New meeting” screen of Artorix (in Russian): a meeting name, the plan as free text, a planned meeting from CoFlow, saved plans, the choice of microphone and computer output, a test on a recording, pad calibration and past meetings with a score and a cost. Names and titles are painted over.
How a meeting starts: a name, the plan as free text, saved plans, two audio sources and a test on a recording. Past meetings carry a score and the cost of the review. Names and titles are painted over.

How it works

Two audio tracks, real-time transcription, analysis in ticks.

Audio comes in on two tracks and is transcribed in the cloud in real time. The model analyses the conversation in “ticks”: every N seconds, or when a pad is pressed.

The Artorix flow: audio, transcription, analysis and the meeting screen MIDI pads: tags Microphonethis is me Computer outputthe other person Audio100 ms blocks TranscriptionSoniox, RU and EN Transcriptone clock from the start of audio Knobs and fadersprocessing parameters Analysis tickClaude, every N seconds CoFlowafter the meeting Meeting screenplan, transcript, analysis cloud service on the laptop

The diagram scrolls sideways.

Grey blocks are cloud services. Everything else runs on my laptop. Artorix writes to CoFlow only after the meeting.
PartWhat it doesWhy this way
Audio captureMicrophone = the host; output capture (WASAPI loopback) = the other person on the call. 16 kHz, mono, 100 ms blocksThe other person arrives on the output device, not in the microphone
Who is speakingAn energy map in 20 ms frames answers “who spoke in this interval” with arithmetic, no modelPhysics knows the role exactly: the microphone is me
TranscriptionSoniox, real time over WebSocket; recordings via a separate asynchronous passRussian and English mixed in one conversation; streaming mode fails on long files
Analysis tickThe model gets the plan, the conversation “thread” and the latest chunk of dialogue; it returns on plan or drifting, closed questions, one to three next questions, key quotes, talk balanceLive analysis on a cheap model, the final review on an expensive one, once or twice per meeting
One clockEvery layer (transcript, tags, analyses) records time from the start of audioOtherwise a pad tag doesn’t land on the right line
ScreenPlan with checklist → transcript with tags → analysis. All of it is a function of the event streamThe stream is saved, so a meeting can be replayed as a “mini-film”
Bridge to CoFlowAt the start it finds the person and opens a session; at the end it writes the outcome. Zero calls during the meetingAn unavailable personal database must never cost a meeting
The live meeting screen of Artorix (in Russian). On the left, the meeting plan as a checklist: finished sections ticked, asked questions struck through. In the middle, the transcript with the pad tag “opened up”. On the right, the knowledge base, open questions, speaker labeling, analysis ticks and the cost per model. The other person’s words are blurred.
A meeting in progress. Left: the plan as a checklist, finished sections ticked, asked questions struck through, “what to ask next” below. Middle: the transcript with a pad tag (“opened up”). Right: the knowledge base, open questions, speaker labeling, analysis ticks and the cost. I blurred the other person’s words.

Stack: Python + FastAPI, everything local on a Windows laptop; the only external services are Soniox (transcription) and Anthropic (analysis). There is also an offline mode: upload a recording and a plan and get a timeline with on-plan stretches in green and deviations in red.

The external MIDI controller

Buttons instead of a keyboard: tagging the other person does not see.

Control lives on an ordinary music pad console, the HXW / Avatar EMP16: 16 velocity-sensitive pads in a 4×4 grid, 4 endless knobs, 4 faders, an OLED screen, USB or Bluetooth (specs). You can hit a pad or move a fader without looking away from the other person and without keyboard noise: that is the whole reason it’s there.

The EMP16 layout in Artorix: a screen, four knobs, four faders and sixteen pads in four layersARTORIX · NormalHaiku · 45 s~$0.71 / hourModelHaiku … OpusModeeconomy … prompterBudget$ capFreeWhat IfeltInterest /driveBored /flatAnxiousIrritatedHow theybehavedOpened upClosed upDodgedPushing /interruptsWhat I thinkthey feltEnthusiasmSkepticismWorryIndifferenceThe meetingImportant /returnTopic jumpI talk too muchAnalyze nowPaceF1DepthF2WindowF3MemoryF4up: richer and pricier

The diagram scrolls sideways.

The same controller as in the photo at the top of the page, drawn with text labels. The pads tag the conversation silently; knobs and faders change the processing parameters live.

Pads: four layers of tagging, one row per layer. What I felt; how the other person behaved; what I think they felt; what is happening with the meeting. Each press lands as a tag on the timeline at that exact moment. The “Analyze now” pad triggers an out-of-turn analysis.

Knobs and faders: processing parameters. Knobs select discrete things: model, preset mode, spending cap. Faders smoothly change four values, covered in the next section. The analyser reads them on every tick, so a turn takes effect from the next analysis, not from the next meeting.

Two practical points

  • Binding by learning. Every unit sends its own MIDI numbers, and you can’t know them in advance. You pick a role on screen, turn the knob you want, and the binding is saved. Pads are calibrated the same way, with the first press.
  • The controller runs in a separate process. If it disconnects or crashes, you lose tags, not the meeting recording (see “What to watch out for”). The system also works without the controller: the same pads and knobs are on screen, but then you have to look at the monitor.

Processing parameters and what changing them gives you

The cost of a meeting is driven by how often the model analyses, not by the window.

The main finding: the cost of a meeting is driven by how often the model analyses, not by the size of the dialogue window. This goes against intuition: it feels like “sending lots of text” is what’s expensive. But text is cheap, while every extra model call drags along the system prompt, the answer and overhead.

What you change on the fly

The order of impact was confirmed by measurements on real meetings. Hourly cost is shown as a guide: what matters is not the numbers themselves but the spread between a knob’s extreme positions.

ControlWhat it setsValuesCost per hour, $Spread
F1 · Pacepause between analyses10 / 25 / 90 / 180 s3.84 / 1.54 / 0.43 / 0.22×17
Knob · Modelwhich model analysesHaiku / Sonnet / Opus1.54 / 3.09 / 7.71×5
F2 · Depthcap on the model’s answer256 / 1,024 / 2,048 tokens1.08 / 1.54 / 2.17×2
F4 · Memoryhow much of the conversation “thread” goes into the prompt0 / 8,000 / 16,000 chars1.06 / 1.54 / 2.03×2
F3 · Windowhow much fresh dialogue per analysis800 / 1,500 / 12,000 chars1.47 / 1.54 / 2.70×1.8

The controls sit on the panel in this order, by strength of impact. In a conversation it works like this: an important stretch starts, I raise the pace; small talk starts, I lower it. A text field is useless for this, while a fader is the same gesture as tagging with a pad. When a control moves, the forecast on screen updates instantly: you see the cost of a decision before you make it.

The Budget tab of Artorix (in Russian): spent so far, cost per tick, forecast per hour, the presets Economy, Normal, Dense, Prompter and the controls: model, pace, answer depth, memory, dialogue window, spending cap. At the bottom, the replay bar of the meeting.
The Budget tab: spent so far, cost per tick and the forecast per hour. Below, the presets and the controls, the same as on the pad console. At the bottom, the meeting replays as a “mini-film”: event 4,068 of 20,976.

Preset modes

A preset sets all controls at once; after that you can move them by hand.

ModeModelPause, sPer meeting hour, $14 meeting hours a month, $
EconomyHaiku900.233
Normal (default)Haiku450.7110
DenseHaiku152.8440
PrompterSonnet155.6880
MaximumSonnet1015.72220

Three non-obvious things the measurements showed

  1. The answer cap is the main valve. The model writes “as much as allowed”, not “as much as needed”: in a long meeting most analyses hit the cap, and the answer becomes the most expensive line in the bill. Lower the cap until the analyses get poorer; test it by running the same recording on two settings.
  2. Memory makes every next analysis more expensive. Facts and open questions accumulate, and by the end of a meeting one tick costs several times more than at the start. Trim it with a window of recent facts, not an on/off switch: memory is what makes the analysis smarter.
  3. Russian text costs roughly three times more than English: it splits into tokens less efficiently. That’s why back-of-the-envelope estimates always come out more optimistic than the bill.

Audio buffers and windows

Numbers that had to be tuned on live meetings.

No controls needed here, but these numbers had to be tuned on live meetings.

ParameterValueWhy
Audio block100 ms at 16 kHzThe microphone sets the tick; the other person’s track goes silent in silence, and its gaps are padded with zeros in a ring buffer
Energy frame20 msEnough to tell by arithmetic who was speaking
Freshness window for the second track90 sIf the other person hasn’t been heard near a line, physics doesn’t judge the role
Role voteonce per meetingThe “me / other person” role isn’t revised on the fly, otherwise lines get torn apart
Session limit90 min, then “continue?”A forgotten session records and transcribes everything said around you

Measurement rule: don’t judge cost from runs shorter than 15 minutes. On a short test a noticeable part of the bill goes to writing the prompt cache, which doesn’t have time to pay off, and the hourly cost comes out twice too high.

What to watch out for

A failure of one part must not cost the meeting.

The main rule: a failure of one part must not cost the meeting. The controller, the second track, the analysis, the database link: any of them may fail, but the recording must finish.

  • A silent failure is worse than a loud one. The worst breakdowns look like normal operation on screen. The system must distinguish “wait” (service overloaded) from “go fix it” (out of credit, wrong key) and say so loudly.
  • The controller runs in a separate process that dies together with the server. MIDI drivers on Windows can crash the whole process in a way you can’t catch. And only one process can hold a MIDI input: a forgotten old listener will grab the controller. If the device “isn’t visible”, check the cable first.
  • The other person arrives on the output, not in the microphone. Capture the output of any device, including Bluetooth headsets, and keep the two tracks separate.
  • A track can die mid-meeting. The other person moves from the call into the room, and all speech starts being attributed to you. No fresh audio on the track, no judgment about the role.
  • Don’t mix two speaker labelings word by word. The transcription service cuts the lines, and the track physics decides once which voice is you. Token-by-token substitution tears monologues to shreds.
  • The model’s answer is data, not a guarantee. It sometimes returns a list as a string. Normalize everything external to the expected types at the boundary, or the assistant goes silent until the end of the meeting.
  • Give the model memory, not the tail of the transcript. Without accumulated facts and questions it re-asks what has already been said. Memory plus only the new chunk of dialogue: both cheaper and smarter.
  • Nothing periodic next to the recording. Polling devices on a timer is a road to a crash. Check only when there is a reason, with an increasing pause.
  • Cost is part of the interface. The spend counter and forecast are always on screen. An unaccounted cost line means “expensive or not” is decided on the wrong number.
  • Show what goes into the model. A diagnostic panel (“this tick, on these words, produced this output and cost this much”) lets you spot a breakdown during the meeting, not after.
  • The screen is a function of the event stream. Then replaying a meeting comes for free and never diverges from what you saw live.
  • Don’t invent numbers or people. If the database is unavailable, the meeting is recorded under a temporary name and linked later. An ambiguous participant is chosen by a human, not the system.

Expected vs observed results

Where quality breaks and where the cost comes from.

The biggest gap between expectation and reality is where quality breaks and where the cost comes from.

WhatExpectedObserved
Help in the momentA prompter every negotiator needsIt helps me keep to the plan and not lose open questions. But some executives want preparation before and a review after, not prompts during. Real time isn’t for everyone
CostExpensive because of speech recognitionTranscription is a small share of the bill; the rest is the language model. A cheap model for live analysis cuts the bill several times, but growing memory later pulls it back up. With the controls, cost became a managed value
Own hardwareLocal models will save moneyAt personal volume it never pays off, and hardware doesn’t buy better speaker labeling
Transcript qualityRecognition breaksRecognition gave correct labeling; our own arithmetic on top of it broke it
Processing controlsSending a large dialogue window is expensiveThe window is the weakest control and the most harmful to save on: cut it and you lose coherence. Pace is what matters
Pad tagsA tag immediately affects the analysisTags land precisely on the timeline and are visible on replay. Getting a tag through to the model, and to the exact phrase inside a long line, is a separate task
Screen during the meetingA quick glanceHeavier than I’d like: any window that covers the transcript gets in the way exactly when you need to look
Profile of the other personThe system remembers the personArtorix remembers the conversation, not the person. The person lives in CoFlow: the brief comes from there and the outcome goes back there

How to build it yourself

Seven steps, from reviewing a recording to a link with a people memory.

Minimum kit: a Windows laptop, Python 3.11+, API keys for a speech recognition service and a language model, any MIDI controller with pads and faders (you can skip it at first).

  1. Start offline. Call recording + plan → transcript → review of “where we followed the plan, where we drifted”. This shows whether you need help at all before you deal with real time.
  2. Capture two tracks separately. The microphone is you, the computer output is the other person. Don’t mix to mono: you’d force the model to guess what is physically known for certain.
  3. Add live analysis with memory. On every tick: the plan, accumulated facts and only the new chunk of dialogue; the answer strictly follows a schema. Validate answer types at the boundary: the model sometimes returns the wrong thing.
  4. Keep parameters in session state, not in a config file. Pace, depth, window, memory and model are read on every tick. Add a cost panel right away: spent so far, cost per tick, forecast per hour. Without it the controls are turned blind.
  5. Connect the MIDI controller in a separate process. Pads are tags, faders are parameters; binding by learning. The controller process must die together with the server.
  6. Record the event stream, not just the text. Then any meeting can be replayed exactly as the host saw it, and the same recording can be run on two control settings.
  7. Link to a people memory, non-critically. Mine is CoFlow: calls only at the start and the end, and if the database is unavailable the meeting still runs and is recorded locally.

And above all: record other people only with their consent.

If you are really interested, I can share the source code: a version you can start building your own from. Write to me and tell me which meetings you want such an assistant for.

Ask for the source code

About the author and what I do with these tools

For me Artorix is a working tool, not a product.

I’m Pavel Mihutski, RND.energy, Valencia. For 20 years I’ve been building and rebuilding businesses; now I research how people make decisions. I have been analysing communication and building ERP and CRM systems since 2010. Artorix and CoFlow are the current versions of tools I have built and rebuilt many times. 9 industries, 130+ projects.

For me Artorix is not a product but a working tool. I use it for interviews and negotiations inside the Founder Sprint: ten working days with a founder on one main question. Where money is being lost, why everything depends on them, what will break as the company grows. From the company’s real data, including conversations with the team and call recordings, I build an honest picture of what is actually happening and where to go next. You get a grounded answer, an action plan with owners and a way to check the result.

If you want an assistant like this but don’t want to build it yourself, setting it up for your meetings is separate paid work.

How the Founder Sprint works. A first 20-minute conversation: via rnd.energy, LinkedIn or Telegram.

Terms

The guide describes the approach, not the code.

© Pavel Mihutski · RND.energy. This guide is for personal use: it describes the approach and the lessons, not the source code. Republishing, passing it on to third parties or commercial use only with the author’s written consent. The source code is not public: I share a version in person, on request.

Want the source code, or an assistant like this for your meetings?

If you want to build your own, I will share a version of the source code. If you want me to set the assistant up for your meetings, that is separate work. Tell me which you prefer and for which meetings. I reply personally.

4000 characters left

Or write directly: Telegram · WhatsApp · LinkedIn